Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
SQL7.0 не использует индексы
|
|||
|---|---|---|---|
|
#18+
Есть запрос select top 20 * from MBAnalit where Vid = 2648 индекс есть прямо по полю Vid. но индекс НЕ ИСПОЛЬЗУЕТСЯ судя по плану запроса. Ну я допускаю, что по каким-то внутренним своим соображениям SQLServ не хочет использовать индекс, НО - в трейсе нарисован READS > 54000 - это же ненормально! Почему так, помогите плиз! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2002, 07:38 |
|
||
|
SQL7.0 не использует индексы
|
|||
|---|---|---|---|
|
#18+
попробуйте принудить ЕГО использовать индекс, написав после from ... index=(имяиндекса) (если не ошибаюсь в синтаксисе). Будет ли изменение в READS? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2002, 08:45 |
|
||
|
SQL7.0 не использует индексы
|
|||
|---|---|---|---|
|
#18+
2Svalik А кинь сюда план запроса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2002, 10:03 |
|
||
|
SQL7.0 не использует индексы
|
|||
|---|---|---|---|
|
#18+
План запроса: |--Top(20) |--Table Scan(OBJECT[XMBOFFICE]. [dbo].[MBAnalit]), WHERE[MBAnalit].[Vid]= 2648 )) Принудить-то можно, но зачем? Ведь очевидно, что он должен индексы использовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2002, 10:14 |
|
||
|
SQL7.0 не использует индексы
|
|||
|---|---|---|---|
|
#18+
Забыл сказать, что если принудительно использовать индекс, то Reads = 500 Так что смысла НЕ ИСПОЛЬЗОВАТЬ индекс я не вижу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2002, 10:19 |
|
||
|
SQL7.0 не использует индексы
|
|||
|---|---|---|---|
|
#18+
Кстати, насколько индекс селективный? Скажите select distinct Vid from MBAnalit и сколько записей в таблице всего и сколько с Vid = 264? Если индекс не селективный или 264 очень много, то серверу выгоднее сканировать таблицу, а не искать индекс, а потом по нему искать страницу данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2002, 11:38 |
|
||
|
SQL7.0 не использует индексы
|
|||
|---|---|---|---|
|
#18+
селективность и все такое: -- 101 distinct Vid -- 302676 count(*) -- 9479 записей с Vid = 2648 Да и дело не в том, что ему выгоднее - я выше писал, что если принудительно указать индекс, то скорость выполнения запроса вырастает в разы - в момент неслабой загрузки сервера запрос без индекса работал 25 сек, а с индексом - 0.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2002, 12:23 |
|
||
|
SQL7.0 не использует индексы
|
|||
|---|---|---|---|
|
#18+
а что насчёт статистик? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2002, 12:47 |
|
||
|
SQL7.0 не использует индексы
|
|||
|---|---|---|---|
|
#18+
1. Оптимизатор в SQL7.0 недоделан, может и ошибаться. 2. Типа сам виноват. Почему нету ORDER BY, который по идее должен быть в любом запросе, а уж тем более с предложением TOP. Такой "нетипичный" запрос сносит крышу у слабенького оптимизатора семерки. Шибко удивлюсь, если при добавлении "ORDER BY Vid", оптимизатор опять не станет использовать индекс. А без этого, оптимизатор предполагает, что эти 20 записей ему очень быстро наберутся при последовательном переборе. Предполая равномерное распределение записей со значением Vid=2648 в таблице, он считает, что 20-ая запись наберется примерно прочтя всего лишь 20/9479=0.2% всей таблицы. Есно, читать 0.2% таблицы дешевле, чем искать по индексу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2002, 12:58 |
|
||
|
SQL7.0 не использует индексы
|
|||
|---|---|---|---|
|
#18+
2 Dankov Не, ORDER BY должен быть далеко не в каждом запросе, даже хорошо бы от него отделываться, где возможно, потому что в случае, если поле не индексировано, то будет строиться временная таблица для сортировки, а это долго. А TOP говорит просто когда остановиться при получении записей, удовлетворяющих запросу. Он почти аналог SET ROWCOUNT. Вообще, конечно, описываемая ситуация странна до невозможности - обычно приходится оптимизатор заставлять _не_ пользоваться индексами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2002, 13:18 |
|
||
|
SQL7.0 не использует индексы
|
|||
|---|---|---|---|
|
#18+
Статистика обновляется (галочки стоят.) Сам индекс перестраивал только что. Проверил еще раз - если указать индекс, то все быстро, если AS IS, то тормозит. Могет, у SQLServ галочка есть - "работать круто"? А 1Гб памяти нормально для базы 5Гб? А top 20 я могу убрать, это не критично как раз - результат тот же ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2002, 13:25 |
|
||
|
SQL7.0 не использует индексы
|
|||
|---|---|---|---|
|
#18+
А попробуй статистику руками обновить? Галочки "работать круто" нет, но можешь попробовать перед монитором пачкой баксов помахать. 1Gb для базы в 5Gb, в среднем, достаточно, но всё зависит от запросов, разумеется - если ты делаешь двадцать джойнов в запросе и группируешь/сортируешь по десяти полям, а потом ещё ROLLUP/CUBE, то тут и со 100Gb сервер лапки поднимет и пощады запросит. А покажи индекс? Хотя вообще-то чего там... Но всё-таки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2002, 14:36 |
|
||
|
SQL7.0 не использует индексы
|
|||
|---|---|---|---|
|
#18+
Статистику обновил руками - та же фигня. Я вчера поздно вечером, когда юзеры ушли, попробовал погонять этот запрос - скорость выполнения ОДИНАКОВАЯ. Что с индексом, что без. Так что какая-то логика у сервака есть. Но вот при загруженом сервере индекс бы помог неслабо. Индекс - CREATE INDEX [Vid_Idx] ON [dbo].[MBAnalit] ([Vid]) WITH FILLFACTOR = 50 ,DROP_EXISTING ON [PRIMARY] Кстати, забыл сказать, что на таблице индексов штук 10 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2002, 05:38 |
|
||
|
SQL7.0 не использует индексы
|
|||
|---|---|---|---|
|
#18+
Переходите на SQL2K, там оптимизатор запросов с установленной галочкой "работать круто" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2002, 08:51 |
|
||
|
SQL7.0 не использует индексы
|
|||
|---|---|---|---|
|
#18+
Гм. Я вот с 2к не работал и даже не видел. Насколько он лучше 7? Или только скин поменян? Ссылки на статьи давать не надо -личный опыт интересует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2002, 09:05 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32025051&tid=1823572]: |
0ms |
get settings: |
6ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
129ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
| others: | 232ms |
| total: | 453ms |

| 0 / 0 |
