为了让系统更高效,我们应该减少数据库 IO 的数量还是减少数据操作的大小?
更具体地说,假设我想获得前 60-70 个对象。
第一种方法:
通过加入几张桌子,我在这里得到了一张巨大的桌子。然后根据一些属性对表进行排序,并返回前 70 个对象及其所有属性,我只使用 60-70 个对象。
第二种方法:
通过加入较少的表并对它们进行排序,我得到了前 70 个对象的 id,然后我根据它们的 id 对 60-70 个对象进行了第二次查找。
那么哪一个在效率方面更好,尤其是 MySQL。
这将取决于您如何设计查询。
通常JOIN
操作比 usingIN (group)
或 nested更有效SELECT
,但是当连接 3 个或更多表时,您必须仔细选择优化它的顺序。
当然,每个表绑定都应该包含一个PRIMARY KEY
.
如果尽管您付出了努力,查询仍然太慢,那么您应该使用缓存。一个新表,甚至是一个文件,它将存储这个查询的结果,直到它应该被更新的给定过期时间。
当系统中经常需要大量查询的结果时,这是一种常见的做法。
您始终可以依靠MySQL Workbench来衡量查询速度并使用您的选项。
通常,利用查询优化的最佳方式是结合您提供的两种方法。
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,然后在主查询中使用它。