我正在使用内部联接创建查询的逻辑。
从理论上讲,如果你从较小的桌子开始,它会加快这个过程吗?
假设我正在比较两个表中的键。表A只有4行。表B有100.
所以会:
SELECT * FROM `a` INNER JOIN `b` ON `a`.`key` = `b`.`key` WHERE `b`.`key`='value'
跑得比:
SELECT * FROM `b` INNER JOIN `a` ON `b`.`key` = `a`.`key` WHERE `b`.`key`='value'
编辑:我用更大的数据集(10,000多个条目)尝试了这一点,并且总是看到不同的结果。我尝试过研究,但找不到明确的答案。如果这个问题太模糊,请道歉。
答案 0 :(得分:1)
4X100 = 100X4(一场比赛并不意味着它的独特之处 - 因此所有人都必须看一下)
即使对a.key和b.key列编制索引,也会使用索引,所需的行仍将减少并以与上述类似的方式相乘。
较小的集合(我假设)会有更大的差异,因为CPU可能会发生缓存,但查询优化器应该发现并重写为最佳执行计划。
答案 1 :(得分:0)
INNER JOIN
是两个表+条件的笛卡尔积。
此查询的另一种语法是:
SELECT * FROM `a`, `b` WHERE `a`.`key` = `b`.`key` AND `b`.`key`='value'
FROM
子句中的表顺序无关紧要。所以我相信,两个查询实际上都是一样的,但是你应该在比100行更大的数据样本上检查它以验证它。