У меня есть таблица с примерно 400 столбцами (в среднем 4-5 миллионов строк), и она имеет ужасную производительность даже для count (*) или выбирает x из y запросов. Сложные запросы, которые занимали секунды в подобной таблице столбцов 30, занимают часы, даже когда доступ к столбцам одинаковый.Проблемы с производительностью SQL Server с очень широкими таблицами (400 столбцов). Нужна ясность в вертикальном разбиении?
Очевидные решения, которые я вижу, являются нормализацией, добавляя индексы и вертикальное разбиение. В этом случае нормализация невозможна, поскольку эти дополнительные столбцы представляют собой более или менее случайные числа и повествования, связанные с каждой записью. Я собираюсь добавлять индексы в наиболее используемые столбцы.
Теперь мои вопросы касаются вертикального разбиения. Я могу разделить 400 столбцов на меньшие таблицы, скажем, по 10 таблиц по 40 столбцов. Но -
Во-первых, есть ли реальная производительность преимущество такого вертикального разделения на всех, учитывая все эти таблицы всегда будут соединены обратно для запроса?
Если есть преимущество в производительности, то какими должны быть критерии разделения? Должен ли я просто поместить столбцы, которые будут в основном нулевыми, в новых таблицах? Или я должен помещать наименее часто используемые столбцы в новые таблицы? Или я должен попытаться создать новые таблицы, чтобы общий размер строки каждой таблицы оставался менее 8000 байт?
Вышеуказанные подходы - это то, что я нашел после многих часов поиска. Будут также оценены любые другие подходы, которые лучше работают для широких таблиц.
Вы придерживаетесь хотя бы 3-й нормальной формы? –
У вас есть кластеризованный индекс в этой таблице? Как ожидаемая продолжительность вашей страницы (есть ли у вас проблемы с этой таблицей в ОЗУ)? Вы проверили план выполнения при выполнении любого из этих запросов, чтобы узнать, в чем проблема? –
Насколько я знаю, ограничение [8060 in-row byte limit] (https://technet.microsoft.com/en-us/library/ms186981 (v = sql.105) .aspx) по-прежнему применяется к более последние версии SQL Server. –