减少数据库IO的数量或数据操作的大小?

时间:2013-09-02 20:15:27

标签: mysql database

为了提高系统效率,我们应该减少数据库IO的数量还是减少数据操作的大小?

更具体地说,假设我想要获得前60-70个对象。

第一种方法

通过加入几张桌子,我在这里得到了一张巨大的桌子。然后根据一些属性对表进行排序,并返回前70个对象及其所有属性,我只使用60-70个对象。

第二种方法:

通过连接较少的表并对它们进行排序,我得到了前70个对象的ID,然后我根据它们的ID对60-70个对象进行了第二次查找。

在效率方面哪个更好,尤其是MySQL。

2 个答案:

答案 0 :(得分:1)

这取决于您的查询设计方式。

通常JOIN操作比使用IN (group)或嵌套SELECT更有效,但是当连接3个或更多表时,您必须仔细选择顺序来优化它。

当然,每个表绑定都应该包含PRIMARY KEY

如果您的努力,查询仍然太慢,那么您应该使用缓存。一个新表,甚至是一个文件,它将该查询的结果存储到应该更新的给定过期时间。

在系统中经常需要繁重查询的结果时,这是一种常见的做法。

您始终可以依靠MySQL Workbench来衡量查询速度并使用您的选项。

答案 1 :(得分:0)

通常,利用查询优化的最佳方法是结合您提供的两种方法。

 SELECT col, col, col, col, etc
   FROM tab1,
   JOIN tabl2 ON col = col
   JOIN tabl3 ON col = col
  WHERE tab1.id IN
   ( SELECT distinct tab1.id
       FROM whatever
       JOIN whatever ON col = col
      WHERE whatever
      ORDER BY col DESC
      LIMIT 70
    )

看看怎么样?您创建子查询以选择ID,然后在主查询中使用它。