2016-07-29 5 views
1

Является ли следующая SQL хорошая или плохая практика с точки зрения производительности?Производительность индекса SQL, что лучше?

Два запросов, поиск по общей колонки:

CREATE INDEX tbl_idx ON tbl (a, b); 

SELECT id, a, b 
FROM tbl 
WHERE a = @a 
    AND b = @b; 


SELECT id, a, b 
FROM tbl 
WHERE b = @b; 
+0

пожалуйста помечать СООТВЕТСТВУЮЩИЕ RDBMS – TheGameiswar

+0

Первый запрос лучше подходит для вашего индекса. Для второго запроса вы должны использовать один индекс столбца. –

+1

, если индекс включен (a, b), запрос только b не будет использовать его. – njzk2

ответ

2

Этот индекс

CREATE INDEX tbl_idx ON tbl (a, b); 

Будет полезен для этих запросов

where a= and b = 
where a= and b> 
where a like 'someval%' and b= 

, но не полезно для эти запросы:

where b= 
    where a> and b= 
    where a like '%someval%' and b= 
    where isnull(a,'')= and b= 

Таким образом, в индексе многоколоночности, если SQL Server смог выполнить поиск в первом ключевом столбце, тогда индекс был бы полезен.

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

Существует множество факторов, которые определяют, является ли поиск хорошим или плохим. В некоторых случаях SQL Server может не использовать индекс, доступный как стоимость поиска закладок, превышает лимит. .

Ссылки:

2

Если изменить порядок столбца индекса (б, а), то индекс может быть полезным для обоих запросов. Кроме того, если id является первичным ключом, реализованным как кластеризованный индекс, индекс будет охватывать оба запроса, поскольку ключ кластеризации неявно включается в качестве локатора строк. В противном случае, идентификатор может быть Явно добавлен в качестве включенного столбца, чтобы обеспечить наилучшую производительность:

CREATE INDEX tbl_idx ON tbl (a, b) 
INCLUDE(id); 
Смежные вопросы