powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / SQL7.0 не использует индексы
16 сообщений из 16, страница 1 из 1
SQL7.0 не использует индексы
    #32024898
Svalik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть запрос

select top 20 *
from MBAnalit
where Vid = 2648

индекс есть прямо по полю Vid.
но индекс НЕ ИСПОЛЬЗУЕТСЯ судя по плану запроса. Ну я допускаю, что по каким-то внутренним своим соображениям SQLServ не хочет использовать индекс, НО -
в трейсе нарисован READS > 54000 - это же ненормально! Почему так, помогите плиз!
...
Рейтинг: 0 / 0
SQL7.0 не использует индексы
    #32024914
Фотография RatTail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробуйте принудить ЕГО
использовать индекс, написав после from ... index=(имяиндекса)
(если не ошибаюсь в синтаксисе).
Будет ли изменение в READS?
...
Рейтинг: 0 / 0
SQL7.0 не использует индексы
    #32024932
KonstN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Svalik
А кинь сюда план запроса?
...
Рейтинг: 0 / 0
SQL7.0 не использует индексы
    #32024935
Svalik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
План запроса:
|--Top(20)
|--Table Scan(OBJECT[XMBOFFICE]. [dbo].[MBAnalit]), WHERE[MBAnalit].[Vid]= 2648 ))

Принудить-то можно, но зачем?
Ведь очевидно, что он должен индексы использовать.
...
Рейтинг: 0 / 0
SQL7.0 не использует индексы
    #32024936
Svalik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Забыл сказать, что если принудительно использовать индекс, то Reads = 500
Так что смысла НЕ ИСПОЛЬЗОВАТЬ индекс я не вижу
...
Рейтинг: 0 / 0
SQL7.0 не использует индексы
    #32024947
KonstN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, насколько индекс селективный?
Скажите select distinct Vid from MBAnalit и сколько записей в таблице всего и сколько с Vid = 264?
Если индекс не селективный или 264 очень много, то серверу выгоднее сканировать таблицу, а не искать индекс, а потом по нему искать страницу данных.
...
Рейтинг: 0 / 0
SQL7.0 не использует индексы
    #32024952
Svalik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
селективность и все такое:
-- 101 distinct Vid
-- 302676 count(*)
-- 9479 записей с Vid = 2648

Да и дело не в том, что ему выгоднее - я выше писал, что если принудительно указать индекс, то скорость выполнения запроса вырастает в разы - в момент неслабой загрузки сервера запрос без индекса работал 25 сек, а с индексом - 0.5
...
Рейтинг: 0 / 0
SQL7.0 не использует индексы
    #32024960
KonstN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а что насчёт статистик?
...
Рейтинг: 0 / 0
SQL7.0 не использует индексы
    #32024962
Dankov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1. Оптимизатор в SQL7.0 недоделан, может и ошибаться.
2. Типа сам виноват. Почему нету ORDER BY, который по идее должен быть в любом запросе, а уж тем более с предложением TOP. Такой "нетипичный" запрос сносит крышу у слабенького оптимизатора семерки. Шибко удивлюсь, если при добавлении "ORDER BY Vid", оптимизатор опять не станет использовать индекс. А без этого, оптимизатор предполагает, что эти 20 записей ему очень быстро наберутся при последовательном переборе. Предполая равномерное распределение записей со значением Vid=2648 в таблице, он считает, что 20-ая запись наберется примерно прочтя всего лишь 20/9479=0.2% всей таблицы. Есно, читать 0.2% таблицы дешевле, чем искать по индексу.
...
Рейтинг: 0 / 0
SQL7.0 не использует индексы
    #32024969
KonstN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Dankov
Не, ORDER BY должен быть далеко не в каждом запросе, даже хорошо бы от него отделываться, где возможно, потому что в случае, если поле не индексировано, то будет строиться временная таблица для сортировки, а это долго.
А TOP говорит просто когда остановиться при получении записей, удовлетворяющих запросу. Он почти аналог SET ROWCOUNT.
Вообще, конечно, описываемая ситуация странна до невозможности - обычно приходится оптимизатор заставлять _не_ пользоваться индексами.
...
Рейтинг: 0 / 0
SQL7.0 не использует индексы
    #32024972
Svalik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Статистика обновляется (галочки стоят.)
Сам индекс перестраивал только что.
Проверил еще раз - если указать индекс, то все быстро, если AS IS, то тормозит.
Могет, у SQLServ галочка есть
- "работать круто"?
А 1Гб памяти нормально для базы 5Гб?
А top 20 я могу убрать, это не критично как раз - результат тот же
...
Рейтинг: 0 / 0
SQL7.0 не использует индексы
    #32024992
KonstN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А попробуй статистику руками обновить?
Галочки "работать круто" нет, но можешь попробовать перед монитором пачкой баксов помахать.
1Gb для базы в 5Gb, в среднем, достаточно, но всё зависит от запросов, разумеется - если ты делаешь двадцать джойнов в запросе и группируешь/сортируешь по десяти полям, а потом ещё ROLLUP/CUBE, то тут и со 100Gb сервер лапки поднимет и пощады запросит.
А покажи индекс? Хотя вообще-то чего там... Но всё-таки.
...
Рейтинг: 0 / 0
SQL7.0 не использует индексы
    #32025037
Svalik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Статистику обновил руками - та же фигня.
Я вчера поздно вечером, когда юзеры ушли, попробовал погонять этот запрос - скорость выполнения ОДИНАКОВАЯ. Что с индексом, что без. Так что какая-то логика у сервака есть.
Но вот при загруженом сервере индекс бы помог неслабо.
Индекс - CREATE INDEX [Vid_Idx]
ON [dbo].[MBAnalit] ([Vid])
WITH
FILLFACTOR = 50
,DROP_EXISTING
ON [PRIMARY]
Кстати, забыл сказать, что на таблице индексов штук 10
...
Рейтинг: 0 / 0
SQL7.0 не использует индексы
    #32025051
Фотография Александр Гладченко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Переходите на SQL2K, там оптимизатор запросов с установленной галочкой "работать круто"
...
Рейтинг: 0 / 0
SQL7.0 не использует индексы
    #32025055
Svalik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гм. Я вот с 2к не работал и даже не видел.
Насколько он лучше 7? Или только скин поменян?
Ссылки на статьи давать не надо -личный опыт интересует.
...
Рейтинг: 0 / 0
SQL7.0 не использует индексы
    #32025142
Фотография Александр Гладченко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Одно из главных отличий SQL2K от 7.0 - это улучшенный оптимизатор запросов.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / SQL7.0 не использует индексы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]