Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Почему при увеличении условий поиск замедляется?

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Прочее] >> Почему при увеличении условий поиск замедляется?
Имя
Сообщение << Старые топики   Новые топики >>
Почему при увеличении условий поиск замедляется? - 2009-06-03 11:05:16.236666   
magistr_bender

Сообщений: 977
Оценки: 0
Присоединился: 2008-02-22 20:10:21.133333
не могу понять почему запрос
SELECT ……….. WHERE search_sn.CLEAR_COD LIKE '".$text_to_search."%' AND b_iblock_element.NAME NOT LIKE '".mysql_escape_string("_")."'
выполняеться в 50-400 раз дольше чем
SELECT ……….. WHERE search_sn.CLEAR_COD LIKE '".$text_to_search."%'
ведь первый запрос поидее должен делать выборку по меньшему числу элементов так как условия ограничения стоят более расширенные…
по крайней мере с другими запросами чем больше ограничений тем быстрее они выполняются… но только не те в которых 2 раза присутствует лайк. почему так происходит?
и возможно ли както ускорить поиск? может я чтото не так делаю?

и вопрос 2
мне надо просто выбрать все элементы в которых b_iblock_element.NAME не начинается с _
Post #: 1
RE: Почему при увеличении условий поиск замедляется? - 2009-06-05 18:18:59.360000   
horiz

Сообщений: 892
Оценки: 0
Присоединился: 2008-11-03 18:33:09.006666
Видимо, неважно сколько строк попадает в выборку, а важно, сколько проверок будет проведено над каждой строкой, прежде чем станет ясно, попадает она в выборку или нет.
Попробуй избавиться от лайка: substring(b_iblock_element.NAME,1,1)!="_"
Хотя, еще не известно, что медленнее.
Post #: 2
RE: Почему при увеличении условий поиск замедляется? - 2009-07-05 00:20:10.140000   
tеstеr

Сообщений: 377
Оценки: -46
Присоединился: 2008-02-08 17:56:40.563333
1
search_sn.CLEAR_COD LIKE '".$text_to_search."%'
преобразуется в
search_sn.CLEAR_COD &gt;= '".$text_to_search."'
и если search_sn.CLEAR_COD индексированное поле, то поиск выполняется моментально.

2
AND b_iblock_element.NAME NOT LIKE '".mysql_escape_string("_")."'
Это относится к другой таблице, вьюхе, подзапросу, … поэтомоу скорость может только уменьшится, а никак не увеличиться.

Теперь по вопросу №2.
символ "_" имеет код 95
символ "`" имеет код 96

Значит запрос вида
b_iblock_element.NAME &lt; "_" AND b_iblock_element.NAME &gt;= "`"
вернет то, что надо.
А если b_iblock_element.NAME проиндексировано, то скорость будет приемлемой.
Post #: 3
Страниц:  [1]
Все форумы >> [Прочее] >> Почему при увеличении условий поиск замедляется?







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.