7

Комментарии к question "How to decrease response time of a simple select query?" Телль:Почему индекс не может сделать много, если он DATETIME или DATETIME2, потому что они включают временную часть?

  • «? Что такое тип данных на LaunchDate индекс, вероятно, не делать, если это DATETIME или Datetime2, потому что они включают в себя временную часть - OMG Ponies»

  • «@OMG - Почему кластерный индекс в столбце DateTime не улучшает производительность? Запрос - это сканирование диапазона, которое позволит быстро найти индексный диапазон, поскольку все данные будут в последовательных блоках? Полу-связанные ... msdn.microsoft.com/en-us/library/ms177416.aspx - Calgary Coder "

  • «Calgary Coder: DATETIME/2 включает время - индекс, кластерный или некластеризованный, был бы хорош для дат с повторяющимися моментами, но не диапазонами. - OMG Ponies»

Я создал тестовую таблицу с кластерным индексом на DATETIME типа столбца LaunchDate и наблюдать индекс ищет запросы, подобные цитируются в выше вопросе:

SELECT COUNT(primaryKeyColumn) 
FROM MarketPlan 
WHERE LaunchDate > @date 

вместо таблицы или индекс сканирование .

Почему кластерный индекс DateTime колонки не улучшит производительность?
Почему не показатель, скорее всего, делать, если это DATETIME или DATETIME2, потому что они включают временную часть?

Я бы оценил сценарий, иллюстрирующий, что индексирование столбца DATETIME не улучшает производительность.

Обновление: Кроме того, предположил ли OMG, что индекс на столбце DATE будет полезен, но не DATETIME и DATETIME2?

+3

Я думаю, что OMG был не прав в этом случае. ** Индексирование должно быть полезным **. –

+0

Диапазон только * раз * (например, 8: 00-10: 00) не будет улучшен индексом, если в столбце указано несколько дат. Но на самом деле это не похоже на то, о чем он говорит. Понятия не имею. –

+0

Это то, что я получаю за то, что не запираю свою рабочую станцию:/ –

ответ

3

Я прочитал другой вопрос, не знаю, что значит OMG пони

3 очка:

  • Это не имеет значения, если индекс кластерный или некластерный:
  • Это не имеет значения, включено ли время слишком
  • Он просто должен быть полезным

Seek или отсканировать:

На основе статистики, если LaunchDate > @date средства, скажем, 90% строк, то, скорее всего, проверка будет происходить. Если это довольно избирательно, то поиск более вероятен.

Независимо от кластеризации или некластеризации!

Какой индекс?

Запрос, как это потребовало бы индекс по LaunchDate и primaryKeyColumn

SELECT COUNT(primaryKeyColumn) 
FROM MarketPlan 
WHERE LaunchDate > @date 

Теперь любой некластеризованный индекс относится к кластерному индексу, который предполагается к ПК по умолчанию. Итак, primaryKeyColumn уже неявно включен.

Суеверие

Однако COUNT(primaryKeyColumn)is a superstition. Поскольку PKs не позволяет NULL, это эквивалентно

SELECT COUNT(*) 
FROM MarketPlan 
WHERE LaunchDate > @date 

SELECT COUNT(1) 
FROM MarketPlan 
WHERE LaunchDate > @date 

Так что вам нужно только индекс на LaunchDate, является ли кластерным или некластерным

+0

Комментарий к вопросу сказал о кластеризованном индексе на LaunchDate, но не в primaryKeyColumn. В такой таблице с 10 строками данных (и 5 столбцов) я наблюдаю Clustered Index Seek, если LaunchDate> @date означает, скажем, любое количество строк 0% 10%, 20%, 30%, 90%, 100% –

+0

@ vgv8: 10 строк - это арахис. Вам понадобятся строки в 10 000. Как я уже сказал, насколько полезен индекс, а не C или NC. нужно использовать primaryKeyColumn, который упрощает индекс – gbn

+0

Почему/как primaryKeyColumn упрощает индекс? –

0

индекса столбца даты не будет использоваться, если ваше приложение использует datetime, которые вызывают неявное преобразование типа данных. Если вы посмотрите на план выполнения, вы увидите, что для столбца есть внутренняя функция. Решение изменяет столбец даты на метку времени (4) или корректирует клиентское приложение для использования даты вместо даты и времени.

+0

Я не Знаешь что вы говорите здесь, но единственный тип данных timestamp, определенный для SQL Server (для которого этот вопрос отмечен) не имеет ничего общего с датами и временем. –