从数据库中选择大量值的最有效方法

时间:2014-02-01 14:25:01

标签: mysql sql

我有一个包含大约2400个“项目”的数据库表。用户将具有来自2400项目集的任意项目组合。然后需要查找每个项目的详细信息并将其显示给用户。获取所有项目详细信息的最有效方法是什么?我可以想到三种方法:

  • 选择所有2400项并解析客户端所需的详细信息。
  • 使用SELECT选择特定项目,这可能是一个很长的SQL字符串(0-2400 ids)?
  • 一次选择一个项目(连接太多)?

我没有提高SQL效率,所以任何指导都会有所帮助。知道这是一个基于AJAX的Web应用程序可能会有所帮助。

编辑:平均而言,用户将选择~150项,极少数超过400-500。

3 个答案:

答案 0 :(得分:1)

最好的方法是在一个查询中返回您想要的数据:

select i.*
from items i
where i.itemID in (<list of ids>);

MySQL查询可能非常大(请参阅here),因此我不担心能够传递值。

但是,如果您的用户有这么多项目,我建议先将它们存储在数据库中,然后再执行join以获取其他信息。

答案 1 :(得分:0)

如果用户从不/很少选择超过50个元素,那么我同意Gordons的回答。

如果它们最多可以选择2400个项目,那么通过将选定的ID插入到保留表然后加入它可能会更好。

但是,可以找到更全面的答案here - 我通过this答案找到了答案。

他的结论是:

  

我们看到,对于大量参数列表,将它们传递到临时表中比作为常量列表快得多,而对于小列表,性能几乎相同。

'小'和'大'几乎不是静态的,但取决于你的硬件 - 所以你应该测试。我的猜测是,你的IN列表中平均有150个元素,你会看到临时表获胜。

(如果你做测试,请回到这里说出你的设置中最快的。)

答案 2 :(得分:-1)

2400项没什么。我有一个拥有数十万行和关系的MySql数据库,只需优化查询就可以完美地工作。

您必须做的是,查看每个SQL查询的执行时间。然后,您可以自己优化每个查询,尝试不同的查询并测量执行时间。

你可以使用ex。 MySql Workbench,Sequel pro,Microsoft Server管理工作室或其他用于构建查询的软件。您还可以向表中添加索引,这也可以改善查询。

如果您需要扩展数据库,可以使用http://hadoop.apache.org

等软件

另外一个值得一提的是NoSQL(Not-Only SQL)。它是一个无关系的数据库,可以处理动态属性,并构建用于处理大量数据。

如你所说,你可以使用AJAX。但这只会有助于页面的加载时间和Web服务器(非SQL服务器)的压力。只要问你是否有更多信息或更深入的解释。