为了提高系统效率,我们应该减少数据库IO的数量还是减少数据操作的大小?
更具体地说,假设我想要获得前60-70个对象。
第一种方法:
通过加入几张桌子,我在这里得到了一张巨大的桌子。然后根据一些属性对表进行排序,并返回前70个对象及其所有属性,我只使用60-70个对象。
第二种方法:
通过连接较少的表并对它们进行排序,我得到了前70个对象的ID,然后我根据它们的ID对60-70个对象进行了第二次查找。
在效率方面哪个更好,尤其是MySQL。
答案 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,然后在主查询中使用它。