Запросы, планы, оптимизация запросов, ...
Модераторы: kdv, CyberMax
-
stix-s
- Заслуженный разработчик
- Сообщения: 557
- Зарегистрирован: 13 дек 2005, 11:52
Сообщение
stix-s » 22 июн 2007, 11:27
WildSery писал(а):
Не вижу тут проблемы:
Код: Выделить всё
select first 1 *
from prefixes px
where '83466343126' starting with (px.prefix)
order by char_length(px.prefix) desc
Если там с пробелами - перед определением длины отрезать.
Погонял вариант с starting with для поиска префикса в триггере при вставке строки с телефоном (ибо есть такая задача) - при загрузке 10000-12000 строк в базу получил 4 мин
мой путь с усечением номера телефона в цикле дал 30сек
индексы помимо первичного ключа не строил
-
WildSery
- Заслуженный разработчик
- Сообщения: 1738
- Зарегистрирован: 05 июн 2006, 16:19
Сообщение
WildSery » 22 июн 2007, 12:38
stix-s писал(а):индексы помимо первичного ключа не строил
Зря. Непонятно тогда, что тестировал.
Уж проверил бы тогда с индексами по полю PREFIX и дополнительному полю с заранее рассчитанной длиной префикса.
-
stix-s
- Заслуженный разработчик
- Сообщения: 557
- Зарегистрирован: 13 дек 2005, 11:52
Сообщение
stix-s » 25 июн 2007, 09:08
WildSery писал(а):stix-s писал(а):индексы помимо первичного ключа не строил
Зря. Непонятно тогда, что тестировал.
Уж проверил бы тогда с индексами по полю PREFIX и дополнительному полю с заранее рассчитанной длиной префикса.
Пардон, в предыдущем посте ввел в заблуждение (восстанавливал в тестовую из рабочей и не деактивировал индекс по полю PREFIX)
Так что преды дущий пост относится к ситуации с индексом.
Без индекса
Код: Выделить всё
select first 1 *
from prefixes px
where '83466343126' starting with (px.prefix)
order by char_length(px.prefix) desc
те же 4 мин
с усечением номера телефона в цикле - более часа
________________
с индексами по полю PREFIX и дополнительному полю с заранее рассчитанной длиной префикса.
Код: Выделить всё
where '83466343126' starting with (px.prefix)
order by px.len_prefix desc
снова 4 мин
(вместо одного номера телефона естественно при загрузке подставляется каждый раз новый)
-
kdv
- Forum Admin
- Сообщения: 6595
- Зарегистрирован: 25 окт 2004, 18:07
Сообщение
kdv » 25 июн 2007, 17:00
снова 4 мин
(вместо одного номера телефона естественно при загрузке подставляется каждый раз новый)
ты на планы запросов смотришь? или пофиг?
по ph.prefix есть обратный индекс?
чего вообще меряем? скорость поиска, или скорость сортировки?
кстати. если есть desc индекс для order by, то с таким where будет на мой взгляд только хуже. Потому что выборка в порядке индекса приведет к офигительному числу чтений с диска. т.е. метанию сервера от индекса к записи и обратно.
-
stix-s
- Заслуженный разработчик
- Сообщения: 557
- Зарегистрирован: 13 дек 2005, 11:52
Сообщение
stix-s » 26 июн 2007, 05:56
kdv писал(а):
ты на планы запросов смотришь? или пофиг?
Смотрю, только здесь не привел

натуралом шпарит
kdv писал(а):
по ph.prefix есть обратный индекс?
для эксперимента построил
kdv писал(а):
чего вообще меряем? скорость поиска, или скорость сортировки?
Да просто эксперементирую

а вообще, конечно интересует скорость поиска
kdv писал(а):
кстати. если есть desc индекс для order by, то с таким where будет на мой взгляд только хуже. Потому что выборка в порядке индекса приведет к офигительному числу чтений с диска. т.е. метанию сервера от индекса к записи и обратно.
В моем случае с
Код: Выделить всё
where '83466343126' starting with (px.prefix)
время существенно не меняется