Искать и сканировать в SQL Server - PullRequest
4 голосов
/ 29 октября 2009

После поиска в Google я узнал, что поиск по индексу лучше, чем сканирование.

Как я могу написать запрос, который будет искать вместо сканирования. Я пытаюсь найти это в Google, но на данный момент не повезло.

Любой простой пример с объяснением будет оценен.

Спасибо

Ответы [ 3 ]

6 голосов
/ 29 октября 2009
  1. Поиск по столбцам первичного ключа
  2. Поиск по столбцу (ам) с индексом (ами)

Индекс - это структура данных, которая повышает скорость операций поиска данных в таблице базы данных. Большинство баз данных автоматически создают индекс, когда для таблицы определен первичный ключ. SQL Server создает индекс для первичного ключа (составной или другой) в качестве «кластеризованного индекса», но он не имеет в качестве первичного ключа - это могут быть другие столбцы.

Примечание:

  • LIKE "%" + критерий + "%" будет не использовать индекс; НРАВИТСЯ критерии + '%' будет

Связанные чтения:

3 голосов
/ 29 октября 2009

Расширение обратной связи rexem:

Идея кластерного индекса для pkeys не является произвольной. Это просто по умолчанию, чтобы сделать pkey кластеризованным. И кластеризованный означает, что значения будут физически размещены рядом друг с другом на странице Sql Server 8k, таким образом, предполагая, что если вы выбираете одно значение с помощью pkey, вы, вероятно, будете заинтересованы в его соседях. я не думаю, что это хорошая идея сделать это для pkeys, так как они обычно уникальны, но произвольные идентификаторы. Лучше кластеризоваться на более полезных данных. Кстати, один кластерный индекс на таблицу.

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

1 голос
/ 29 октября 2009

Поиск по индексу - это когда SQL Server может использовать двоичный поиск для быстрого поиска строки. Строки в индексе сортируются в определенном порядке, и ваш запрос должен указать достаточно информации в предложении WHERE, чтобы SQL Server мог использовать отсортированный индекс.

Сканирование индекса - это когда SQL Server не может использовать порядок сортировки индекса, но все же может использовать сам индекс. Это имеет смысл, если строки таблицы очень большие, но индекс относительно небольшой. SQL Server будет только читать меньший индекс с диска.

В качестве простого примера возьмем таблицу телефонной книги:

id int identity primary key
lastname varchar(50)
phonenumber varchar(15)

Скажите, что есть индекс (фамилия). Тогда этот запрос приведет к поиску индекса :

select * from phonebook where lastname = 'leno'

Этот запрос приведет к сканированию индекса :

select * from phonebook where lastname like '%no'

Аналогия с реальной телефонной книгой в том, что вы не можете искать людей, чье имя заканчивается на «нет». Вы должны просмотреть всю телефонную книгу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...