| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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. Кстати не понял глубинного смысла конструкции:
|
| Автор: Artemon 1.2.2006, 17:36 | ||
| Я привел примерный запрос, на самом деле, вмечто '%' - строка. Я даже не подумал, что это может изменить суть вопроса........ Добавлено @ 17:46
Где мне эту справку посмоьреть? |
| Автор: boevik 1.2.2006, 17:58 |
| Именно от условия и зависит, какой индекс и каким образом будет работать в запросе. |
| Автор: Vit 1.2.2006, 18:10 | ||||
| Приведенные 2 запроса будут работать совершенно по разному:
|
| Автор: Artemon 1.2.2006, 19:55 |
| При таком запросе индекс должен ускорять работу или нет? |
| Автор: boevik 1.2.2006, 20:09 | ||||
Например, если есть индекс по полю Field, то при таком запросе
выполняется index seek, т.е. ускоряет работу. А при таком
index scan или table scan, т.е. наличие индекса не ускоряет выполнение запроса. |
| Автор: Artemon 1.2.2006, 20:21 |
| Понятно. |
| Автор: Artemon 2.2.2006, 13:36 |
| Vit, я SQL SERVER первый раз увидел неделю назад. я пока еще не ориентируюсь не в самом SQL SERVER'е Да и в запросах тоже слабоват............ P.S. В Query Analyser почему-то не выдается время выполнения запроса. Куча всякой инфы есть, а времени нет, или я слипой. |
| Автор: Vit 2.2.2006, 14:54 |
| Время есть - внизу в правом углу. Кроме того зайди в меню и включи - смотреть план выполнения запроса, тогда можно будет посмотреть схему запроса и затраты времени на каждый шаг |