Привет, гуру SQL, там ... У меня проблема с этим месяцем, которую я не могу решить. У меня эта очень широкая (отчетная) таблица ок. 100+ полей. Прямо сейчас, он имеет около 2M записей и с темпом, что данные идут, это, вероятно, удвоит этот счет в следующие 1-2 месяца. Он работает приемлемый на данный момент. Но не так уж и уверен в ближайшие пару месяцев. В принципе, я просто хочу знать, какой будет лучший индексный план для этого типа таблицы. Это не фактическая таблица, но она очень близка. Я просто хочу проиллюстрировать различные типы данных.Лучший план индексирования SQL для широкой таблицы
ID bigint IDENTITY (UNIQUE CLUSTERED INDEX)
Column1 varchar(4000) NULL
...
Column50 varchar(1000) NULL
Column60 int NULL
...
Column60 nvarchar(max) NULL
Теперь эта таблица в настоящее время запрашивается таким образом:
SELECT <ALL COLUMNS EXCEPT ID>
FROM ThisTable WITH(NOLOCK) --i know how this works dont warn me :)
WHERE
(@Column1 IS NULL OR CHARINDEX('|' + [Column1] + '|', @Column1) > 0))
...
AND (@Column99 IS NULL OR CHARINDEX('|' + [Column99] + '|', @Column99) > 0))
Возможных значений для каждого Params/Поля:
@Column1 = '|value1|value2|value3|'
Column1
value1
value2
Я знаю, что основное чтение плана выполнения и от того, что Я вижу ... много SCANS продолжается. Но, как я уже сказал, похоже, что я уже врезался в стену, поэтому я здесь и сейчас ищу помощь :). Я знаю, как индексировать небольшие таблицы на основе того, для чего они предназначены, таблицы, но ЭТО широко? Я могу просто убить себя: D
Любые идеи? Я немного читал о Columnstore INDEX .. это самое жизнеспособное решение, о котором я могу думать .. но на этот момент имеется очень мало информации, доступной для этого подхода.
Если вам интересно, как я придумал эту таблицу. Ну его содержимое поступает из разных таблиц (сглаживается). Обработка осуществляется в ночное время. Результат экспортируется в CSV-файл, который затем будет служить источником данных для другого приложения для отчетов.
Заранее благодарен!
Проблема в коде, а не в базе данных. Применяя функции к значениям столбца, вы вынуждаете базу данных проверять всю таблицу для вычисления значений, а затем проверяйте, какие из них соответствуют критериям. Если вы хотите сравнить со списком значений, передайте табличный параметр или присоединитесь к другой таблице, содержащей нужные вам значения. То, что вам следует задавать, это «как передать многозначные параметры в запросе», не глядя на обходные методы индексирования. Вы также должны google для «Звездных схем», хранилищ данных, книг Ральфа Кимбалла и т. Д. –
Это единственный подход, который я могу представить на основе требований, чтобы иметь множественный выбор. т. е. из множественного раскрывающегося списка в пользовательском интерфейсе пользователь может выбрать значение1, значение2 и т. д. ... нет выбора ALL. – jackCaller
Все столбцы в списке выбора, charindex в where where и ORed, а также столбцы, которые выглядят как продукт объединения нескольких значений. Здесь нет стратегии индексирования, которая может вам помочь. – dean