Заменить сканирование индекса на поиск индекса в запросе SELECT SQL Server


0 принят

Это происходит потому, что индекс не покрывает: вы выбираете ВСЕ поля в таблице.

Когда индекс не охватывает сервер sql запросов, выполните следующие шаги:

1) Индекс стремится найти значения PK (и включены столбцыd), которые соответствуют предикату

2) Поиск ключа (поиск в кластерном индексе) для каждой строки, чтобы найти значения столбца, который не был включен в индекс.

Поэтому в некоторых случаях оптимизатор запросов решает, что полное сканирование таблицы выполняется быстрее, чем эти два шага.

Вы можете заменить SELECT *с SELECT dt(сделать индекс покрытия) , и вы получите индекс искать. Вот еще информация: что такое закрытый индекс?


0

Ты должен попытаться :

SELECT *
FROM dbo.MessageLast c
        JOIN #t t on c.partner_id = t.partner_id
where  c.Stat_Date >= '2017-04-25' 
                and c.Stat_Date <= '2017-04- 26' 
SQL-сервер, SQL-сервер-2014,

sql-server,sql-server-2014,

1

Ответов: 2


0 принят

Это происходит потому, что индекс не покрывает: вы выбираете ВСЕ поля в таблице.

Когда индекс не охватывает сервер sql запросов, выполните следующие шаги:

1) Индекс стремится найти значения PK (и включены столбцыd), которые соответствуют предикату

2) Поиск ключа (поиск в кластерном индексе) для каждой строки, чтобы найти значения столбца, который не был включен в индекс.

Поэтому в некоторых случаях оптимизатор запросов решает, что полное сканирование таблицы выполняется быстрее, чем эти два шага.

Вы можете заменить SELECT *с SELECT dt(сделать индекс покрытия) , и вы получите индекс искать. Вот еще информация: что такое закрытый индекс?


0

Ты должен попытаться :

SELECT *
FROM dbo.MessageLast c
        JOIN #t t on c.partner_id = t.partner_id
where  c.Stat_Date >= '2017-04-25' 
                and c.Stat_Date <= '2017-04- 26' 
SQL-сервер, SQL-сервер-2014,
Похожие вопросы