Почему при увеличении условий поиск замедляется?
Пользователи, просматривающие топик: 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 не начинается с _
|
|
|
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)!="_" Хотя, еще не известно, что медленнее.
|
|
|
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 >= '".$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 < "_" AND b_iblock_element.NAME >= "`" вернет то, что надо. А если b_iblock_element.NAME проиндексировано, то скорость будет приемлемой.
|
|
|
|
|