Используемые типы данных и плотность того, сколько данных в строке равна нулю, определяет эффективность разреженных столбцов. Если все поля в таблице заполнены, на хранение этих строк на самом деле больше накладных расходов, и это приведет к более быстрому удалению этого максимального размера страницы. Если это так, не используйте разреженные столбцы.
Посмотрите, сколько вы можете преобразовать из статических типов в переменные длины (varchar, nvarchar, varbinary). Это может купить вам дополнительное пространство на странице, поскольку поля переменной длины могут быть помещены в страницы переполнения, но несут накладные расходы на 24 байта для указателя на страницу переполнения. Я подозреваю, что вы думаете, что разреженные столбцы позволят вам хранить столбцы 30K ... это было бы только тем обстоятельством, когда у вас была широкая таблица, где большая часть столбцов имеет значение NULL.
MongoDB не будет вашим ответом ... по крайней мере, не без большого количества рефакторинга. Вы не сможете использовать существующие хранимые процедуры. Это может быть лучше всего подходит вам, но есть много вещей, которые следует учитывать при переходе на MongoDB. Ваш уровень доступа к данным нужно будет перестроить, если только вам не удастся сохранить ваши данные в реляционной структуре как документы JSON :). Я предполагаю, что это не так.
Я предполагаю, что у вас широкие столы, и они густо заселены ... исходя из этого предположения, вот моя рекомендация.
Разделите таблицу, как предложил Владимир, но создайте представление, которое объединит все эти таблицы, чтобы оно выглядело как одна таблица.Теперь у вас такая же структура, как и раньше. Затем добавьте вместо представления триггер в представление, чтобы обновить таблицы. Это способ, которым вы можете получить то, что хотите, без необходимости выполнять основной рефакторинг кода. Существует код, который нужно добавить для триггера, но мой опыт в том, что его легко написать, и в большинстве случаев я не писал код, но создал сценарий для генерации кода для всех представлений, которые мне приходилось делать, поскольку он повторялся.
Согласен, но дело в том, что на данный момент у меня всего 863 столбца. но это бросает ошибку. – user2956568
Предел, на который вы нажимаете, - это не количество столбцов, а 8060 байт в строке. Единственным обходным решением, которое я могу придумать, является разбиение таблицы по вертикали на несколько таблиц с меньшим количеством байтов на строку. –
Это слишком дорогостоящее время и усилия, или я могу переместить таблицу в базу данных nosql и использовать хранимую процедуру sql? – user2956568