powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / [PHP] Поиск по БД (стал очень медленный)
25 сообщений из 25, страница 1 из 1
[PHP] Поиск по БД (стал очень медленный)
    #38647574
Goror
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотел сделать самый быстрый в мире сайт) Но что-то не успел отплыть от гавани он начал тонуть...

Не могу понять пока причину тормозов, работало всё очень шустро и я уже начал думать, что ещё чуть чуть и все перейдут с гугула на мои сайт-поиск..


Потом резко в один момент поиск стал "залипать" хотя в БД не так и много записей для тестирования.. около 100 тыс.

Задержка 1-1.5 секунды примерно чисто если в браузере смотреть. В общем очень заметно особенно, если не кэшированные страницы.

Я думаю там могут быть 3 причины тормозов
1) Нужно оптимизировать БД (сейчас она весит около 40мб (по-моему это совсем мало для того чтоб БД тормозило))
2) Ошибки в JS скриптах, ajax и прочее
3) PHP - тормозные SQL запросы и тд.



Что вы на счёт этого скажите, где по вашему собака зарыта?)
...
Рейтинг: 0 / 0
[PHP] Поиск по БД (стал очень медленный)
    #38647583
Sanjar88
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проиндексируйте таблицы, особенно те поля к которым идёт запрос поиска и попробуйте, просто при поисковых запросах идёт анализ всей таблицы он ищет совпадение везде, а при индексе он будет проверять сначала их.
...
Рейтинг: 0 / 0
[PHP] Поиск по БД (стал очень медленный)
    #38647591
Goror
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sanjar88Проиндексируйте таблицы, особенно те поля к которым идёт запрос поиска и попробуйте, просто при поисковых запросах идёт анализ всей таблицы он ищет совпадение везде, а при индексе он будет проверять сначала их.

Я сделал индексы, даже эксплейном каждый запрос проверял.. Вроде бы всё норм было.


Хотя у меня есть LEFT JOIN-ы таблиц. И не тормозило примерно тогда, когда БД весила примерно 5-10 мб. Может 40мб это очень много инфы для поиска?
...
Рейтинг: 0 / 0
[PHP] Поиск по БД (стал очень медленный)
    #38647593
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Goror,

1) и 3)

еще смотря как и что искать. индексы не всегда будут использоваться. если поиск полнотекстовый. то и индекс нужно создавать специальный.

в общем приведите примеры структур таблиц, данных. как и что ищите.
тогда можно будет сказать где можно ускорить
...
Рейтинг: 0 / 0
[PHP] Поиск по БД (стал очень медленный)
    #38647629
Goror
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
r uGoror,

1) и 3)

еще смотря как и что искать. индексы не всегда будут использоваться. если поиск полнотекстовый. то и индекс нужно создавать специальный.

в общем приведите примеры структур таблиц, данных. как и что ищите.
тогда можно будет сказать где можно ускорить

Понятно!

Нет, полнотекстовый поиск я пока не использовал (его планировал для длинных фраз-запросов в конце подключать после 3-4 слов)

Сейчас пока чисто с "LIKE%", "LIKE" по ключ-значение и тд.
...
Рейтинг: 0 / 0
[PHP] Поиск по БД (стал очень медленный)
    #38647650
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gororr uGoror,

1) и 3)

еще смотря как и что искать. индексы не всегда будут использоваться. если поиск полнотекстовый. то и индекс нужно создавать специальный.

в общем приведите примеры структур таблиц, данных. как и что ищите.
тогда можно будет сказать где можно ускорить

Понятно!

Нет, полнотекстовый поиск я пока не использовал (его планировал для длинных фраз-запросов в конце подключать после 3-4 слов)

Сейчас пока чисто с "LIKE%", "LIKE" по ключ-значение и тд.

Пример запроса с LIKE кинь. Не все LIKE запросы используют индексы.
...
Рейтинг: 0 / 0
[PHP] Поиск по БД (стал очень медленный)
    #38647665
Goror
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёр Не все LIKE запросы используют индексы.

Это да, но я специально их эксплейн запросами проверял, чтоб все они использвоали индексы..


Вот один из основных запросов:

Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT sl.id, sl.content,  sb.key_id, sb.site_id, sb.page_id, sb.rate, sb.content_2, sb.img_url,   ud.id, ud.img_par_1, ud.url, ud.par_1 
	FROM search_live sl
	LEFT JOIN search_base sb ON sl.id = sb.key_id 
	LEFT JOIN url_db ud ON sb.site_id = ud.id 
	WHERE sl.id=$key OR sb.key_id=$key  OR  sb.key_id=$parent  OR  sl.id=$parent  OR  sl.content 
        LIKE '$q%' 
	ORDER by sb.rate DESC
...
Рейтинг: 0 / 0
[PHP] Поиск по БД (стал очень медленный)
    #38647709
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GororПрограмёр Не все LIKE запросы используют индексы.

Это да, но я специально их эксплейн запросами проверял, чтоб все они использвоали индексы..


Вот один из основных запросов:

Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT sl.id, sl.content,  sb.key_id, sb.site_id, sb.page_id, sb.rate, sb.content_2, sb.img_url,   ud.id, ud.img_par_1, ud.url, ud.par_1 
	FROM search_live sl
	LEFT JOIN search_base sb ON sl.id = sb.key_id 
	LEFT JOIN url_db ud ON sb.site_id = ud.id 
	WHERE sl.id=$key OR sb.key_id=$key  OR  sb.key_id=$parent  OR  sl.id=$parent  OR  sl.content 
        LIKE '$q%' 
	ORDER by sb.rate DESC



Ну и при каком количестве записей на выходе начинает тормозить? (я имею ввиду сколько записей должно попасть в выборку, что бы начались тормоза?)

1. Один из JOIN может неверно подобрать индекс, а потому по одной таблице пойдёт full scan
2. индексируется ли поле sb.rate? Если нет, то на выходе получаем file sort. )) И запрос в разы медленнее.

Для проверки что глючит, надо выполнить один из тормозных запросов вручную. Если затормозит запрос - искать проблему в mysql, если нет - в php или чём либо другом.

Если данная выборка отдаст 100000 записей, поверьте, Ваш скрипт просто ляжет... и очень даже на долго (может секунд на 20 повиснуть), так как в самом запросе я не вижу limit, то предполагаю, что описанная ситуация возможна.

Да и вообще на стороне mysql клиента (в данном случае это я про php) может много чего быть... Чуть меньше возможно на js, но всё же напоследок и его стоит проверить. Тем более, очень интересно, где лежит основная логика. на сервере (php) или клиенте (js)?


P.S. С гугла на Ваш сайт никто не переплывёт. Уж поверьте, до их "находимости", быстродействия и стабильности добраться не так уж и просто. Вот например вижу, что Вы переменные прямо в запрос закидываете... это так? Если да, и при этом не используется экранирование данных, то Вашу базу поломать и получить всё что хочется (или записать всё что угодно) можно на счёт раз.
...
Рейтинг: 0 / 0
[PHP] Поиск по БД (стал очень медленный)
    #38647765
Goror
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПрограмёрЕсли данная выборка отдаст 100000 записей, поверьте, Ваш скрипт просто ляжет... и очень даже на долго (может секунд на 20 повиснуть), так как в самом запросе я не вижу limit, то предполагаю, что описанная ситуация возможна.

Лимиты у меня стоят тут:
$result = mysql_query("$sql LIMIT $start, $num");

Програмёр1. Один из JOIN может неверно подобрать индекс, а потому по одной таблице пойдёт full scan
Это пока не проверял..

ПрограмёрВот например вижу, что Вы переменные прямо в запрос закидываете... это так? ю...и при этом не используется экранирование данных...
Верно подметили, да я пока убрал экранирование и тд, чтоб легче было смотреть код, а то очень длинные строки выходят, на экран всё не помещается и тд))

Програмёргде лежит основная логика. на сервере (php) или клиенте (js)
На сервере в основном, на JS скорее лёгкая коррекция данных, хотя бывает от этого много зависит, для быстродействия и тд
...
Рейтинг: 0 / 0
[PHP] Поиск по БД (стал очень медленный)
    #38647797
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
херовый поиск
как пример http://zhivika.ru/
логика - найти можно по любой части (по любым 2 частям) названия, необязательно совпадающей с началом слова(слов)
...
Рейтинг: 0 / 0
[PHP] Поиск по БД (стал очень медленный)
    #38647952
Goror
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяхеровый поиск
как пример http://zhivika.ru/
логика - найти можно по любой части (по любым 2 частям) названия, необязательно совпадающей с началом слова(слов)

Честно сказать я не понял, вы этот сайт как "Хороший" пример привели или как "Херовый"?!)


Мне лично поиск на нём не очень понравился, "живой" поиск ведёт себя странно..

При вводе слова: Таб, (начало от Таблетки)
1) первым пунктом вывело Таблетки от кашля... , а потом пошло что-то непонятное, типа:
2) Цитрамон п таб №34534
3) Ля ля ля тра ляля таб.... ля ля ля


А основной поиск дал такой результат:

Результаты поиска по запросу "таб"

1) Нейролептики
2) Язва
3) Предметы ухода за больными
и тд.


Так и должно быть по задумке?
...
Рейтинг: 0 / 0
[PHP] Поиск по БД (стал очень медленный)
    #38647989
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Goror,
искать начиная с "таблетки" наверно не верно, потому как слово таблетки может встречаться в половине названий
и может быть как в в начале названия, так и в середине.
информативнее искать по самой информативной части названия.
я написал - как пример не плохого поиска.
но он тоже имеет недостатки.
я уже в начале "нулевых" предложил оптимальный поиск.
основанный на распарсивании введенное xxx zzz в like %xxx% and like %zzz%
число введенных блоков может быть произвольным
причем дожно быть ограничение на вывод limit 10 (но не более 15)
...
Рейтинг: 0 / 0
[PHP] Поиск по БД (стал очень медленный)
    #38648001
whitediver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для разминки попробуйте начать писать медленные sql в лог
лог
Потом есть смысл посмотреть что в результате

Ну а если выясните что база не виновна то xdebug и профилирование вам в помощь.
...
Рейтинг: 0 / 0
[PHP] Поиск по БД (стал очень медленный)
    #38648009
Goror
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяGoror,
искать начиная с "таблетки" наверно не верно, потому как слово таблетки может встречаться в половине названий
и может быть как в в начале названия, так и в середине.
информативнее искать по самой информативной части названия.
я написал - как пример не плохого поиска.
но он тоже имеет недостатки.
я уже в начале "нулевых" предложил оптимальный поиск.
основанный на распарсивании введенное xxx zzz в like %xxx% and like %zzz%
число введенных блоков может быть произвольным
причем дожно быть ограничение на вывод limit 10 (но не более 15)


Ну в целом обычный сайт с обычным поиском, как говориться без претензий на призовые места)
На счёт разбивки на слова like %xxx% and like %zzz% я как ни странно тоже пробовал такой вариант, он у меня по сути тоже участвует в скрипте, но в последнее время я мало на него обращаю внимания, потому что мне больше нравиться "точные" попадания с 2-3 символов, а так да, конечно это сложная тема, хотя и кажется довольно простой, но там много комбинаций и нужно их все рассматривать очень детально и как говориться нужно чувствовать)


вадяя уже в начале "нулевых" предложил оптимальный поиск.
Я примерно с 2005 года периодически занимаюсь web-сайтами, хотя в начале в основном с Flash работал, это вот сейчас, последние месяцы активно занялся "поиском", php, sql, js и тд. Как-то что-то потянуло и не хочу бросить на пол пути)
...
Рейтинг: 0 / 0
[PHP] Поиск по БД (стал очень медленный)
    #38648011
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
посоветуйте наконец Сфинкс человеку.
...
Рейтинг: 0 / 0
[PHP] Поиск по БД (стал очень медленный)
    #38648013
whitediver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ScareCrow, ваистену так
...
Рейтинг: 0 / 0
[PHP] Поиск по БД (стал очень медленный)
    #38648015
Goror
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ScareCrowпосоветуйте наконец Сфинкс человеку.

Готовые решения не для меня) Я давно тестировал Сфинкс, но он как монолит, там ничего не изменишь под свои нужды и тд)
...
Рейтинг: 0 / 0
[PHP] Поиск по БД (стал очень медленный)
    #38648019
whitediver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Goror, а что вам не хватает в сфинксе... просто любопытно
...
Рейтинг: 0 / 0
[PHP] Поиск по БД (стал очень медленный)
    #38648022
Goror
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
whitediverGoror, а что вам не хватает в сфинксе... просто любопытно

Сложно контролировать его работу, мне нужна немецкая овчарка, которую я буду натравливать на сайты и она мне будет приносить то, что мне нужно, а не без контрольный крокодил, который пожирает всё подряд)
...
Рейтинг: 0 / 0
[PHP] Поиск по БД (стал очень медленный)
    #38648028
whitediver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Goror, минутку так вы ищете не в локальной базе а каждый раз перебираете сайты?
...
Рейтинг: 0 / 0
[PHP] Поиск по БД (стал очень медленный)
    #38648031
Goror
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
whitediverGoror, минутку так вы ищете не в локальной базе а каждый раз перебираете сайты?

Ну да, сканирую сайты, но не часто, через крон, примерно раз в 2-3 дня) И если есть изменения и тд. А так лишний раз не трогаю.)
...
Рейтинг: 0 / 0
[PHP] Поиск по БД (стал очень медленный)
    #38648040
Goror
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
whitediverGoror, минутку так вы ищете не в локальной базе а каждый раз перебираете сайты?

Точней не так, ищу конечно в локальной БД, но информацию для этой БД собираю с внешних источников.
...
Рейтинг: 0 / 0
[PHP] Поиск по БД (стал очень медленный)
    #38648096
рубист
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GororПрограмёр Не все LIKE запросы используют индексы.

Это да, но я специально их эксплейн запросами проверял, чтоб все они использвоали индексы..


Вот один из основных запросов:

Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT sl.id, sl.content,  sb.key_id, sb.site_id, sb.page_id, sb.rate, sb.content_2, sb.img_url,   ud.id, ud.img_par_1, ud.url, ud.par_1 
	FROM search_live sl
	LEFT JOIN search_base sb ON sl.id = sb.key_id 
	LEFT JOIN url_db ud ON sb.site_id = ud.id 
	WHERE sl.id=$key OR sb.key_id=$key  OR  sb.key_id=$parent  OR  sl.id=$parent  OR  sl.content 
        LIKE '$q%' 
	ORDER by sb.rate DESC



Вот этот кусок условия вообще не нужен
Код: sql
1.
OR sb.key_id=$key  OR  sb.key_id=$parent



проверьте индексы.
sl.content какой тип в базе имеет?
...
Рейтинг: 0 / 0
[PHP] Поиск по БД (стал очень медленный)
    #38648123
Goror
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
рубист
Вот этот кусок условия вообще не нужен
Код: sql
1.
OR sb.key_id=$key  OR  sb.key_id=$parent





Кстати да, эти OR $key и $parent-ы притормаживают, особенно если $key или $parent пусты, сейчас проверил, с ними примерно ~2 секунды запрос, без них 0.0041


p.s Нужно будет ещё полазить по SQL запросам, я кое что в них добавлял без тестирования и тд. Может потому где-то стоп кран вместо дверной ручки дёрнул..
...
Рейтинг: 0 / 0
[PHP] Поиск по БД (стал очень медленный)
    #38648599
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
думаеться мне автор не решит сдесь свою главную проблему - сделать самый быстрый поиск на планете :)

ЗЫ
ещо обратить надо внимание, что возможно тормоза были всегда. просто раньше в кеши влазили индексы, и данных было мало и запросы тестовые однотипные...и база очень хорошо использовала кешированые данные. а когда обьём стал большим, оно в кеши не влазит всё, и сразу тормоза всплыли на поверхность.
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / [PHP] Поиск по БД (стал очень медленный)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]