사용되는 데이터 유형과 행의 데이터 양이 null 인 경우 스파 스 열의 효과가 결정됩니다. 테이블의 모든 필드에 데이터가 채워지면 실제로 이러한 행을 저장하는 데 더 많은 오버 헤드가 발생하므로 해당 최대 페이지 크기를 더 빨리 초과하게됩니다. 그렇다면 스파 스 열을 사용하지 마십시오.
정적 데이터 유형에서 가변 길이 데이터 유형 (varchar, nvarchar, varbinary)으로 변환 할 수있는 데이터의 수를 확인하십시오. 가변 길이 필드를 오버플로 페이지에 넣을 수 있기 때문에 페이지에서 몇 가지 추가 공간을 구입할 수 있지만 오버플로 페이지에 대한 포인터의 오버 헤드는 24 바이트입니다. 나는 당신이 스파 스 컬럼이 30K 컬럼을 저장할 수 있다고 생각하고 있었다고 생각합니다. 이것은 컬럼의 대부분이 널인 넓은 테이블을 가지고있는 상황 일뿐입니다.
MongoDB는 최소한 리팩토링을하지 않아도 답변을 얻지 못할 것입니다. 기존 저장 프로 시저를 활용할 수 없습니다. 가장 적합한 도구 일지 모르지만 MongoDB로 이동할 때 고려해야 할 사항이 많이 있습니다. JSON 문서처럼 관계형 구조에서 데이터를 지속하지 않는 한 데이터 액세스 계층을 다시 작성해야합니다. 나는 그것이 사실이 아니라고 생각한다.
나는 당신이 넓은 테이블을 가지고 있고 밀도가 높다고 가정하고 있습니다 ... 여기에 대한 가정을 토대로 제 추천이 있습니다.
블라디미르 제안대로 테이블을 분할하지만이 테이블을 모두 하나로 결합하여 하나의 테이블처럼 보이게하는보기를 만듭니다.이제 당신은 전에했던 것과 같은 구조를 가지고 있습니다. 그런 다음 트리거 대신 대신 트리거를 뷰에 추가하여 테이블을 업데이트하십시오. 이것은 코드의 주요 리팩토링을하지 않고도 원하는 것을 얻을 수있는 방법입니다. 트리거에 추가해야하는 코드가 있지만 작성하기가 쉽고 코드를 작성하지 않았지만 이후에이 작업을 수행 한 모든 뷰에 대한 코드를 생성하는 스크립트를 작성한 경험이 많습니다 그것은 반복적이었다.
동의하지만, 지금은 테이블에 863 개의 열만 있습니다. 하지만 그것은 오류를 던지고있다. – user2956568
당신이 치는 한도는 열의 수는 아니지만 행당 8060 바이트입니다. 내가 생각할 수있는 유일한 해결 방법은 행 당 바이트 수가 적은 여러 테이블로 테이블을 세로로 분할하는 것입니다. –
시간과 노력으로 너무 비쌉니다. 또는 테이블을 nosql 데이터베이스로 이동하고 SQL 저장 프로 시저를 사용할 수있는 방법이 있습니까? – user2956568