mysql与限制和偏移的连接性能

时间:2012-01-26 18:11:49

标签: mysql

热烈奔跑。 A有数百万条记录,B,C,D ......较小(数千)

SELECT ... FROM A LEFT OUTER JOIN B ... LIMIT 1000 OFFSET 0;

返回< 0.1秒

SELECT ... FROM A LEFT OUTER JOIN B ... LIMIT 1000 OFFSET 1000000;

虽然这在>中返回4秒

假设顺序是A的PK,并且所有连接都被正确索引,我会假设2个操作应该具有相似的性能,但看起来它的O(N)根据偏移...

查询计划不应该首先从A中选择1000,然后再进行连接吗?我将A的选择与两个不同的偏移进行了比较,时间差远小于1秒,因此不应解释给定连接时间的巨大差异。

这是mysql查询计划优化器的缺陷吗?

1 个答案:

答案 0 :(得分:1)

由于您未提及ORDER BY子句,因此可以在第一个查询中的限制中指定的1,000条记录之后停止查询。第二个查询较慢,因为必须生成1,001,000条记录,然后只返回最后1,000条记录。

希望有所帮助。