2013-03-08 65 views
0

我必须对每个数百万条目的大型数据库执行高级搜索查询。动态优化查询以获得最佳结果

我们不想硬编码查询,而是动态地提出查询。高级搜索允许您根据各种参数进行搜索 - 日期,来自其他列的ID,包括多个order_id,order_item一次在搜索字段中提供。实际上,批量订单搜索是它的主要焦点。

因此,查询框架的方式是这个应用程序的核心。

我在寻找什么我应该寻找的建议,或优化查询的最佳做法。对于EG-:

在where条件,具有更好的索引中的列,应先搜索,然后又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/

拿出通用的例子来说明你关于select,join,where,order_by的观点。应该如何构建这样的大型表上的查询?

我对这个问题的一般性质表示歉意,但坦率地认为这可能会有所帮助。

+1

但是... MySQL有它自己的优化器。它为你做了这一切。 – 2013-03-08 10:28:30

+0

@TomvanderWoerdt - 如果是这样,我会很高兴。但它没有办法。 http://stackoverflow.com/questions/141278/subqueries-vs-joins – 2013-03-08 10:31:14

+2

这取决于MySQL的版本。该帖子是从2008年以来相当过时,虽然我仍然会使用联合对子查询,而不是使用IN。 WHERE子句的顺序应该不是我想要的。除此之外,您需要先进行连接以排除大多数记录(可能会使用STRAIGHT_JOIN强制解决此问题) – Kickstart 2013-03-08 10:37:18

回答

0

要执行大型数据库高级搜索查询每百万个条目

,并就最好的结果是即时查询优化的好主意,用

http://sphinxsearch.com/

+0

我能将它集成到现有的Rails应用程序吗? – 2013-03-08 10:48:16