【发布时间】:2012-11-08 16:29:16
【问题描述】:
从 MySQL 中的多个表中进行选择时,以下两个查询都返回相同的结果集。
这些查询中的一个更好还是比另一个更有效?根据我对一个小数据集(每个表中大约 2k 行)的测试,它们都在大约相同的执行时间内返回相同的结果集。
查询 1:
SELECT
*
FROM
products,
product_meta,
sales_rights
WHERE
(
products.id = product_meta.product_id
AND products.id = sales_rights.product_id
)
AND (...)
LIMIT 0,10;
查询 2:
SELECT
*
FROM
products
INNER JOIN product_meta ON products.id = product_meta.product_id
JOIN sales_rights ON product_meta.product_id = sales_rights.product_id
WHERE
(...)
LIMIT 0,10;
【问题讨论】:
-
总是使用第二个,这是现代的做法!
-
体面的 DBMS 应该有一个查询优化器,可以消化输入查询并找出运行它的最佳方式。所以查询优化器应该平等地处理你提到的查询。
-
在我的 Oracle SQL Developer 3.1.06 设置中,“从 t1、t2、t3 where 中选择”比使用“从 t1 内连接 t2 上选择...”的等效项快 0,016 秒:0,094 秒对 0,109 秒。尽管答案指出,可读性有所下降。
标签: mysql