Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.05.21;
Скачать: [xml.tar.bz2];

Вниз

Время выполнения запроса   Найти похожие ветки 

 
yaral ©   (2006-03-23 13:24) [0]

У меня есть база с таблицей в которой порядка 250 млн записей, в ней поле типа varchar(5), в первом случае на него не построен индекс, и запрос вида:
SELECT * FROM BIGTABLE WHERE F1="XXXXX"
выполняется довольно быстро (500 млс), и фетчутся все записи потом тоже довольно быстро (4 c)
При построение индекса по этому полю время выполнения этого же запроса увеличивается примерно в 4 раза.
Но при выполнени этого запроса при WHERE F1="XXXXX" где "XXXXX" в таблице нету, запрос без индекса по этому полю начинает очень догло выполняться т.е. 20 мин.
А если с индексом то время не меняется, т.е. довольно быстро.
В таблице примерно 250 млн записей, разброс по полю "XXXXX" примерно 5000 вариантов
Скажите, почему так происходит?


 
Sergey13 ©   (2006-03-23 13:27) [1]

2 yaral ©   (23.03.06 13:24)
Не понял. Ты постоянно переиндексируешь таблицу что ли?


 
yaral ©   (2006-03-23 13:29) [2]

Нет у меня две базы, в одна с индексом, другая без


 
Sergey13 ©   (2006-03-23 13:33) [3]

2[2] yaral ©   (23.03.06 13:29)
И что? Ты экспериментирушь с индексами или это какая то практическая задача? Что удивительного в том, что с индексами читает быстрее? Они для того и предназначены.
Или я не въехал в вопрос?


 
yaral ©   (2006-03-23 13:38) [4]

В том то и дело что с индексами не быстрее, если такие записи есть то в 4 раза дольше! Но вот если нет записей подходящих под условие то запрос без индексов начинает очень долго выполняться! Почему?


 
Johnmen ©   (2006-03-23 13:39) [5]

Неплохо бы привести здесь планы запросов.


 
Johnmen ©   (2006-03-23 13:39) [6]

И описание построенного индекса...


 
yaral ©   (2006-03-23 13:41) [7]

Планы запросов в случае без индексов natural  с индексом по индексу соответсвенно выполняеться
Индекс по полю одному полю varchar(5) построен, других нет


 
Sergey13 ©   (2006-03-23 13:46) [8]

2[4] yaral ©   (23.03.06 13:38)
>В том то и дело что с индексами не быстрее, если такие записи есть то в 4 раза дольше!
Ну так идет считывание и передача найденного? Ссылка найдена в индексе. Идет переход в таблицу и читается запись. Если не найдено, то перехода в таблицу нет.

>Но вот если нет записей подходящих под условие то запрос без индексов начинает очень долго выполняться! Почему?
Идет полное сканирование таблицы для подтверждения, что "нет записей подходящих под условие".

Что удивительного то?

Как-то структурируй свои результаты. А то вперемежку с/без индексов сбивают с толку.


 
Johnmen ©   (2006-03-23 13:52) [9]

Ну не хочешь приводить, да и ладно...


 
yaral ©   (2006-03-23 13:55) [10]

>> Sergey13 ©   (23.03.06 13:46) [8]
при имеющихся в таблице заначениях из условия where f1="XXXXX"
- Запрос без использования индексов 600 млс
- Запрос с использованием индексов 2400 млс
если в таблице нет заначений удовлетворяющих условию where f1="XXXXX"
- Запрос без использования индексов 20 мин !!!!!!
- Запрос с использованием индексов 2400 млс


 
yaral ©   (2006-03-23 13:56) [11]

> Johnmen ©   (23.03.06 13:52) [9]
Посмотреть не могу, сейчас на другой машине работаю, приведу обязательно!


 
Sergey13 ©   (2006-03-23 14:01) [12]

2[10] yaral ©   (23.03.06 13:55)
>при имеющихся в таблице заначениях из условия where f1="XXXXX"
- Запрос без использования индексов 600 млс
- Запрос с использованием индексов 2400 млс

Тебе тут просто повезло. Записи нашлись в "начале" сканируемой таблицы и пошел их вывод. Попробуй сразу перейти на последнюю запись, и скорее всего будут те-же 20 минут.

>если в таблице нет заначений удовлетворяющих условию where f1="XXXXX"
- Запрос без использования индексов 20 мин !!!!!!
- Запрос с использованием индексов 2400 млс

См.выше. Тут тебе не повезло. 8-)


 
yaral ©   (2006-03-23 14:07) [13]

>> Sergey13 ©   (23.03.06 14:01) [12]
Я на разных "XXXXX" проверял, и которые в начале, и в середине и в конце
Все тоже самое


 
Sergey13 ©   (2006-03-23 14:15) [14]

2[13] yaral ©   (23.03.06 14:07)
>Я на разных "XXXXX" проверял, и которые в начале, и в середине и в конце
Я специально в "начале" откавычил. Начало и конец таблицы - это фикция, и ты этого знать не можешь - где лежит запись - в начале или в конце.
В любом случае - попробу нажать кнопку перемещения в конец полученного набора данных сразу после того как запрос "отработал". Что будет?


 
Anatoly Podgoretsky ©   (2006-03-23 14:23) [15]

yaral ©   (23.03.06 14:07) [13]
О каких в начале, и в середине и в конце идет речь, откуда такое может взяться?


 
yaral ©   (2006-03-23 14:50) [16]

>> Anatoly Podgoretsky ©   (23.03.06 14:23) [15]
Просто вариантов не так много и можно из все проверить, какие из них должны быть в начале, а какие то в конце.

>> Sergey13 ©   (23.03.06 14:15) [14]
Конечно пробовал, в обоих случаях перемещается в конец НД с одинаковой скоростью, примерно 4 с.


 
Sergey13 ©   (2006-03-23 14:58) [17]

2 [16] yaral ©   (23.03.06 14:50)
Попробуй обновить индекс.
Хотя я не понял, чем тебе не нравится результат работы с индексами (он по твоим результатам уж всяко не хуже безиндексного). Из 250 лимонов записей выбрать 50000 за 600/2400 млс - очень неплохой показатель. Да еще и индекс по варчару.


 
unknown ©   (2006-03-23 15:27) [18]

К стати, а какова статистика индекса?


 
ANB ©   (2006-03-23 17:37) [19]


> - Запрос без использования индексов 600 млс

А часом таблица не отсортирована по
этому полю ?


 
Sergey Masloff   (2006-03-23 18:05) [20]

Нескромный вопрос - а Primary Key есть в таблице? ;-))))
Просто 20 минут наводит на мысли


 
Desdechado ©   (2006-03-23 20:37) [21]

много зависит от:
- кардинальности индекса (количества различных значений) - чем больше, тем лучше
- размера страницы в БД (от него зависит глубина бинарного дерева индекса, ибо глубина>3 плохо, почти как без индекса)
- размера кластера на диске с БД (желательно равенство с размером страницы или 2 кластера на страницу)
- допустимости NULL в поле
- если поле длиной 5 всегда имеет 5 знаков, то VARCHAR только ухудшает время доступа
- суммарной длины полей в записи (чем больше, тем хуже - даже при индексном поиске)



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2006.05.21;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.011 c
2-1146653813
паша32
2006-05-03 14:56
2006.05.21
1) Как из DateTimePicker a "вырезать" номер месяца?


2-1146213563
Новенький
2006-04-28 12:39
2006.05.21
Копия фрейма в приложении


2-1146232505
Mark86rus
2006-04-28 17:55
2006.05.21
Как при перекодировке из Win 1251 в KOI8 избавиться от значений?


6-1137789560
GuAV
2006-01-20 23:39
2006.05.21
Можно ли закрыть listen socket при работающих accepted ?


2-1146474009
Ded22
2006-05-01 13:00
2006.05.21
SQL Запрос !





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский