0

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

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

第一种方法

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

第二种方法:

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

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

4

2 回答 2

1

这将取决于您如何设计查询。

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

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

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

当系统中经常需要大量查询的结果时,这是一种常见的做法。

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

于 2013-09-02T20:24:19.053 回答
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,然后在主查询中使用它。

于 2013-09-02T20:23:51.270 回答