Подскажите, почему TableScan если есть индекс?
Роман Ткачук
Дата: 16.12.2002 10:34:45
Подскажите плиз, кто умный и опытный (MSSQL7):
Написал запрос в QA, смотрю план, вижу TableScan. Сделал индекс на поле, по которому шёл TableScan, при создании индекса там галочка "Do not recompute statistics" - не ставил, понятно дело. Снова запросу говорю check, смотрю план - то же самое. Запустил sp_updatestats. Снова запросу говорю check, смотрю план - то же самое.
Как мне понять, то ли он прав насчёт TableScan, то ли он не видит индекса?
Зайцев Фёдор
Дата: 16.12.2002 10:38:41
скрипт и запрос сюда
Роман Ткачук
Дата: 16.12.2002 10:43:01
дохрена получится. стоит ли загромождать? может наводящие вопросы?
У меня вопрос именно следующего плана: можно ли, тупо глядя на Plan в QA, понять, что он не использует IndexScan именно потому, что считает TableScan оптимальнее, а не потому, что не заметил индекса?
dao
Дата: 16.12.2002 10:44:00
Столкнулся с такой штукой - сушествует некий показатель - при привышении которого происходит полное сканирование и не работа индекса -а показатель наверное состоит из отношения операций чтения по индексу к количеству строк в тавлице - по моему
Kilroy
Дата: 16.12.2002 10:46:12
Считай операции ввода-вывода, т.е. количество страниц в том и другом
случае. Все данные есть в таблице sysindexes.
Роман Ткачук
Дата: 16.12.2002 10:52:45
To Kilroy:
Спасибо, но - глюпый я в этом. Что конкретно (какие столбцы) смотреть в sysindexes и с чем их сравнивать?
Роман Ткачук
Дата: 16.12.2002 10:59:18
Вот запрос из QA:
SELECT COUNT(ID) AS Кол, SUM(АктСумма) AS Сумма
FROM ViewActsSum
WHERE (Тип = 1)
GROUP BY ID
вот ViewActsSum:
SELECT Acts.ID, Acts.Тип, SUM(TMZ.Сумма) AS АктСумма, ...
FROM Acts INNER JOIN
TMZ ON Acts.ID = TMZ.АктСсылка
GROUP BY Acts.ID, Acts.Тип, ...
AAron
Дата: 16.12.2002 11:03:06
а индекс какой?
Genady
Дата: 16.12.2002 11:03:47
Народ, ну что вы в самом деле так помешались на обязательном использовании индекса, оптимизатор сам оценивает что стоит дешевле использовать индекс или нет, просто потому что сканировать таблицу может быть дешевле чем делать поиск по индексу.
По моему опыту оптимизатор ошибается достаточно редко, и вообще если сомневаетесь, используйте ITW.
sinner
Дата: 16.12.2002 11:10:09
:(
ну блин при таком условии отбора индекс и не будет юзаться
у него же селективность никакая - скока значений у поля Тип = 1?
ну не больше 5 же ?
посему он всю строку и проходит
если бы у тебя их несколько десятков было индекс бы и заюзался