2013-03-08 2 views
0

Мне нужно выполнить расширенные поисковые запросы по большим базам данных с миллионами записей.Оптимизация запроса «на лету» для получения наилучших результатов

Вместо запросов жесткого кодирования мы хотели запросить запросы «на лету». Расширенный поиск позволяет выполнять поиск по различным параметрам - датам, идентификаторам из других столбцов, включая несколько order_id, order_item в поле поиска одновременно. Фактически, поиск навальных заказов - это основное внимание.

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

Я ищу предложения по тому, что я должен искать, или лучшие практики для оптимизированных запросов. Для eg-:

В где состояние, колонка с лучшим индексом, следует искать первый, а потом еще parameter.Basically select * from orders where order_id in (a,b,c....) and relayed=true; гораздо лучше, чем select * from orders where relayed=true and order_id in (a,b,c....);. Как ретранслируются имеет индекс процент только 50. Это может быть либо истинным или ложным, так что результирующий набор запроса по-прежнему большой

Кроме того, как есть нагрузки в записях, это хорошая идея - http://explainextended.com/2009/08/18/passing-parameters-in-mysql-in-list-vs-temporary-table/

Придумайте общие примеры, чтобы проиллюстрировать вашу точку, относящуюся к выбору, объединению, где, order_by. Как структурировать запросы на таких больших таблицах?

Приносим извинения за общий характер этого вопроса, но, откровенно говоря, он может быть полезен.

+1

Но ... MySQL имеет собственный оптимизатор. Он делает все это для вас. –

+0

@TomvanderWoerdt - Если это так, я был бы в восторге. Но это не так. http://stackoverflow.com/questions/141278/subqueries-vs-joins –

+2

Это зависит от версии MySQL. Сообщение Tht было в 2008 году настолько датировано, хотя я бы все же использовал объединение против подзапроса, а не используя IN. Порядок предложений WHERE не должен иметь большого значения, я надеюсь. Кроме того, вам нужно сделать свое объединение, чтобы сначала исключить большинство записей (возможно, заставив проблему использовать STRAIGHT_JOIN) – Kickstart

ответ

0

Для выполнения дополнительных поисковых запросов на больших базах данных, каждый с миллионами записей

и оптимизация запросов на лету для достижения наилучших результатов это является хорошей идеей использовать

http://sphinxsearch.com/

+0

Смогу ли я интегрировать это в существующее приложение Rails? –