Мне нужно выполнить расширенные поисковые запросы по большим базам данных с миллионами записей.Оптимизация запроса «на лету» для получения наилучших результатов
Вместо запросов жесткого кодирования мы хотели запросить запросы «на лету». Расширенный поиск позволяет выполнять поиск по различным параметрам - датам, идентификаторам из других столбцов, включая несколько 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. Как структурировать запросы на таких больших таблицах?
Приносим извинения за общий характер этого вопроса, но, откровенно говоря, он может быть полезен.
Но ... MySQL имеет собственный оптимизатор. Он делает все это для вас. –
@TomvanderWoerdt - Если это так, я был бы в восторге. Но это не так. http://stackoverflow.com/questions/141278/subqueries-vs-joins –
Это зависит от версии MySQL. Сообщение Tht было в 2008 году настолько датировано, хотя я бы все же использовал объединение против подзапроса, а не используя IN. Порядок предложений WHERE не должен иметь большого значения, я надеюсь. Кроме того, вам нужно сделать свое объединение, чтобы сначала исключить большинство записей (возможно, заставив проблему использовать STRAIGHT_JOIN) – Kickstart