Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS SQL Server > ИНДЕКСЫ


Автор: Artemon 1.2.2006, 12:05
Везде сказано, что индексы ускорят поиск по БД.


Имеется таблица примерно следующего содержания:

ID_ARTIST - NUM
ID_GENRE - NUM
ARTIST - STR


Создаю индекс: CRATE INDEX NEW_INDEX ON ARTISTS (ARTIST)

Выполняю запрос: SELECT ARTIST FROM ARTIST WHERE ARTIST LIKE '%'
ORDER BY ARTIST

Но почему-то увеличение скорости поиска не наблюдается.


P.S.
Индекс создаю для уже заполненной таблицы



Автор: boevik 1.2.2006, 12:14
Artemon, твоем случае надо выбрать всю таблицу, и индекс не поможет.
Я неуверен, что при использывании like индекс поможет.
Вот если бы поиск происходил бы по определенному ID, тогда индеь по ID ускорит поиск по таблице.
Добавлено @ 12:15
Что б убедится в том помогает индекс или нет, надо посмотреть execution plan запроса.

Автор: Akina 1.2.2006, 12:39
При выборке ВСЕЙ таблицы некластерный индекс только увеличит время выборки, если его использовать.
Для ускорения выборки по Like части данных надо строить полнотекстовый индекс - иначе индекс тоже не сможет использоваться (за исключением случая когда в шаблоне статические символы только в начале шаблона).
См. справку - оптимизация запросов на выборку.

Автор: Vit 1.2.2006, 16:08
Открываем Query Analyser, кладём туда твой запрос, смотрим план выполнения запроса, чего там используется и сколько ресурсов на это тратиться... Там есть ответы на все подобные вопросы. Кроме того можно директивно заставить запрос использовать тот или иной индекс и посмотреть что из этого получится.

PS. Кстати не понял глубинного смысла конструкции:


Код

 WHERE ARTIST LIKE '%'

Автор: Artemon 1.2.2006, 17:36
Я привел примерный запрос, на самом деле, вмечто '%' - строка.

Я даже не подумал, что это может изменить суть вопроса........
Добавлено @ 17:46
Цитата

См. справку - оптимизация запросов на выборку.



Где мне эту справку посмоьреть?

Автор: boevik 1.2.2006, 17:58
Именно от условия и зависит, какой индекс и каким образом будет работать в запросе.

Автор: Vit 1.2.2006, 18:10
Цитата(Artemon @ 1.2.2006, 08:36 Найти цитируемый пост)

Я даже не подумал, что это может изменить суть вопроса........

Приведенные 2 запроса будут работать совершенно по разному:

Код

Select * From ... Where Field like 'Something%'

Код

Select * From ... Where Field like '%Something'

Автор: Artemon 1.2.2006, 19:55
При таком запросе индекс должен ускорять работу или нет?

Автор: boevik 1.2.2006, 20:09
Например, если есть индекс по полю Field, то при таком запросе
Код

Select * From ... Where Field like 'Something%'

выполняется index seek, т.е. ускоряет работу.

А при таком
Код

Select * From ... Where Field like '%Something%'

index scan или table scan, т.е. наличие индекса не ускоряет выполнение запроса.

Автор: Artemon 1.2.2006, 20:21
Понятно.

Автор: Vit 1.2.2006, 21:38
Цитата(Artemon @ 1.2.2006, 10:55 Найти цитируемый пост)

При таком запросе индекс должен ускорять работу или нет?


А последовать совету слабо?:

Цитата(Vit @ 1.2.2006, 07:08 Найти цитируемый пост)

Открываем Query Analyser, кладём туда твой запрос, смотрим план выполнения запроса, чего там используется и сколько ресурсов на это тратиться... Там есть ответы на все подобные вопросы. Кроме того можно директивно заставить запрос использовать тот или иной индекс и посмотреть что из этого получится.



То что тебе Боевик сказал - видно же невооружённым глазом... Достаточно открыть и посмотреть... smile

Автор: Artemon 2.2.2006, 13:36
Vit, я SQL SERVER первый раз увидел неделю назад.

я пока еще не ориентируюсь не в самом SQL SERVER'е

Да и в запросах тоже слабоват............


P.S.
В Query Analyser почему-то не выдается время выполнения запроса.
Куча всякой инфы есть, а времени нет, или я слипой.

Автор: Vit 2.2.2006, 14:54
Время есть - внизу в правом углу. Кроме того зайди в меню и включи - смотреть план выполнения запроса, тогда можно будет посмотреть схему запроса и затраты времени на каждый шаг

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)