Вопрос

Наши сайты подвергаются довольно серьезной атаке, поэтому мы рассматриваем возможность оптимизации некоторых из наших существующих запросов.

Изучая это, мы столкнулись с несколькими запросами, план выполнения которых был примерно в 4-5 раз быстрее, когда в запросе была простая ссылка на кластеризованный индекс...например

Если это был старый запрос:

SELECT ...
FROM myTable
WHERE categoryID =  @category 

следующий запрос будет в 4 раза быстрее в соответствии с планом выполнения в SSMS:

SELECT ...
FROM myTable
WHERE categoryID =  @category 
AND lotID = lotID

Кажется, мы не можем понять, как это ускорит запрос.Кластеризованный индекс находится на лоте ID, но, поскольку он сравнивает себя с самим собой, как это помогает?

Это было полезно?

Решение

мне кажется довольно очевидным

ваш первый запрос не покрывается кластерным индексом, а второй - потому что лотID не находится в предложении WHERE первого запроса

Возможно, вы захотите прочитать SQL Server, покрывающий индексы чтобы увидеть, как это все работает

вам также необходимо понимать, что кластеризованный индекс — это данные, все данные таблицы находятся в кластеризованном индексе.когда вы создаете некластеризованный индекс для таблицы, которая имеет кластеризованный индекс, тогда некластеризованный индекс будет иметь указатель на кластеризованный индекс (поскольку именно там находятся остальные данные), если только вы не сможете полностью удовлетворить свой запрос с помощью некластеризованного индекса. индекс, и в этом случае будет использоваться только некластеризованный индекс... Сейчас я перестану болтать

РЕДАКТИРОВАТЬ

Я читаю и lotid = @lotid not and lotid = lotid

иногда вы можете подделать кластерный индекс, выполнив команду, где lotID >0 (выбрав наименьшее из имеющихся у вас чисел), и вы получите поиск

Так что, если ваш самый маленький Lotid = 1 и вы добавляете и лота> 0

вы также можете увидеть поиск вместо сканирования, я показываю WHERE IndexValue > '' в этом посте Всегда ли поиск по индексу лучше или быстрее, чем сканирование по индексу?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top