Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

Быстрый поиск по большой таблице (stylus)
Author Message
stylus
Заглянувший



Joined: 18 Apr 2011
Posts: 3
Карма: 0
   поощрить/наказать


PostPosted: Mon Apr 18, 2011 3:29 pm (написано за 6 минут 48 секунд)
   Post subject: Быстрый поиск по большой таблице
Reply with quote

Доброго времени суток :)

за 2 дня весь интернет перерыл в поисках ответа, чего то мало чего нашел что действительно может помочь поэтому решил написать здесь.

Так. проблема собственно вот в чем.
есть Mysql база данных, в ней - таблица с (на данный момент) 220 000 записей.
На самом сайте есть поиск, который ищет по этой таблице. на данный момент используется оператор LIKE. все это дело грузится минут 10-15. иногда даже приходится mysql сервер перезапускать чтобы все снова заработало, иначе висит ужасно все.

Нужно оптимизировать запрос/базу. нагуглил только fulltext search и memcached, что может быть полезным наверное. Но насколько я понял, fulltext ищет только по текстовым полям, а у меня нужно искать как по текстовым (text), так и по integer, vachar даже datetime/date.

сперва думал нужно таблицу разбить на много маленьких таблиц и работать как то с ними но думается что это только замедлит процесс.
вспоминается поиск Вконтакте, он же там моментально работает. яндекс, гугл итд тоже работают же как то шустро.

Ребят, помогите добрым советом, любой наводке буду рад, а ссылке на мануальчик по этой теме (желательно на русском) буду очень рад :)
заранее спасибо :)
Back to top
View user's profile Send private message
Ivan1986
Участник форума
Warnings: 2


Joined: 09 Oct 2007
Posts: 807
Карма: 38
   поощрить/наказать


PostPosted: Mon Apr 18, 2011 9:48 pm (спустя 6 часов 19 минут; написано за 4 секунды)
   Post subject:
Reply with quote

sphinx
Back to top
View user's profile Send private message Send e-mail
Миша Спларов
Участник форума



Joined: 17 Nov 2003
Posts: 821
Карма: 65
   поощрить/наказать

Location: Россия, Москва

PostPosted: Tue Apr 19, 2011 7:33 am (спустя 9 часов 44 минуты; написано за 1 минуту 11 секунд)
   Post subject:
Reply with quote

Покажите запрос, который выполняется 15 минут? Кстати, ничего не мешает искать фултекстом по текстовым полям и обычным способом по остальным.
Back to top
View user's profile Send private message
stylus
Заглянувший



Joined: 18 Apr 2011
Posts: 3
Карма: 0
   поощрить/наказать


PostPosted: Tue Apr 19, 2011 8:20 am (спустя 46 минут; написано за 3 минуты 15 секунд)
   Post subject:
Reply with quote

SELECT id FROM rk_relevanzliste, rk_dokumentenliste WHERE doku_aktuell = '1' AND doku_aktiv = '1' AND ( `relevanz_verantwortlicho` = 'test' )ORDER BY doku_id

вот типа такого.
в таблице rk_dokumentenliste около 2000 строк (если только из неё извлекать то терпимо)
в таблице rk_relevanzliste около 220000 строк. тут грузится очень долго.

мне подсказали что нужно ключи к полям добавить. ко всем полям по которым данные ищутся (которые были vachar) - добавил индексы, теперь ищется меньше секунды.
но появилась вторая проблема - к полям типа text ключи не добавляются. а текста там в каждом больше 500 символов точно.

Есть какие нибудь идеи как и эти поля ускорить? или что еще можно сделать чтобы быстрее искалось?)
Back to top
View user's profile Send private message
Миша Спларов
Участник форума



Joined: 17 Nov 2003
Posts: 821
Карма: 65
   поощрить/наказать

Location: Россия, Москва

PostPosted: Tue Apr 19, 2011 10:17 am (спустя 1 час 57 минут; написано за 46 секунд)
   Post subject:
Reply with quote

А зачем выбирать из двух таблиц если они в запросе никак не связываются?
stylus wrote:
но появилась вторая проблема - к полям типа text ключи не добавляются. а текста там в каждом больше 500 символов точно.
Приведите пример запроса с поиском по этим полям.
Back to top
View user's profile Send private message
stylus
Заглянувший



Joined: 18 Apr 2011
Posts: 3
Карма: 0
   поощрить/наказать


PostPosted: Tue Apr 19, 2011 11:27 am (спустя 1 час 10 минут; написано за 2 минуты 12 секунд)
   Post subject:
Reply with quote

Quote:
А зачем выбирать из двух таблиц если они в запросе никак не связываются?
в веб интерфейсе есть поисковой фильтр где задаются конкретные критерии и в зависимости от критериев может выбираться как из обеих так и из однрой таблицы, т.е. запрос генерируется этим фильтром.

ну вот довольно долгий
Quote:
SELECT * FROM rk_relevanzliste, rk_dokumentenliste WHERE doku_aktuell = '1' AND doku_aktiv = '1' AND ( `relevanz_accept_kunde` LIKE 'relevant' ) AND ( `relevanz_bemerkung_kunde` LIKE '%test%' ) AND ( `relevanz_vorschlag_stc` LIKE 'empfohlen' ) AND ( `relevanz_verantwortlicho` LIKE '%test%' ) AND ( `relevanz_bemerkung_stc` LIKE '%test%' )ORDER BY doku_id
MySQL вернула пустой результат (т.е. ноль строк). ( запрос занял 36.1959 сек. )
P.S. поля которые начинаются с doku_ - одна таблица, relevanz_ - другая.

вот сам фильтр если интересно
i056.radikal.ru/1104/94/3ed827f547f6.png
Back to top
View user's profile Send private message
Миша Спларов
Участник форума



Joined: 17 Nov 2003
Posts: 821
Карма: 65
   поощрить/наказать

Location: Россия, Москва

PostPosted: Wed Apr 20, 2011 10:20 am (спустя 22 часа 53 минуты; написано за 2 минуты 17 секунд)
   Post subject:
Reply with quote

stylus
А какое условие в фильтре объединяет две таблицы?

По запросу:
- можно добавить индекс на relevanz_accept_kunde;
- для relevanz_bemerkung_kunde индекс работать не будет, можно попробовать FULL TEXT (как и для других полей, где слева (%test) может быть "хоть что");
- для relevanz_vorschlag_stc можно добавить индекс, если все условия на это поле однотипные.
Back to top
View user's profile Send private message
Hamp
Заглянувший



Joined: 22 Apr 2011
Posts: 1
Карма: 0
   поощрить/наказать

Location: Москва

PostPosted: Fri Apr 22, 2011 7:23 pm (спустя 2 дня 9 часов 2 минуты; написано за 25 секунд)
   Post subject:
Reply with quote

memcached используйте - сильно сэкономит время
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML