我有一个MYSQL表,行数约为5000万(预计会增长)。现在我需要迭代整个表。我试图以块的形式进行迭代,即获取N行,处理,获取另外N行
该表具有自动递增整数ID作为主键。这样可以更容易迭代。我的问题是:哪个语句会更快(哪里是一种循环计数器):
SELECT * FROM table WHERE ID IN (i, i+1, ..., i+N)
OR
SELECT * FROM table WHERE ID >= i AND ID < i + N
第一个使用IN
子句,它对主键进行查找,我认为这个子句非常快。第二个具有小于+大于条件的条件,对于非索引列将非常慢。但由于我在主键上执行此操作,因此我不确定其性能。
其中哪一项可以提供更好的效果,让我们说N = 1000
?
答案 0 :(得分:2)
使用这个:
SELECT * FROM table WHERE ID >= $i AND ID < $i + $N
&#34;范围扫描&#34;很高兴找到第一行($ i),然后得到Next,Next,......这非常有效。
但是,这确实假设ID很密集。如果删除了很多行,则每次可能无法使用$ N行。 (是的,你可以说这并不重要。)
$ N = 1000 - 这是一个合理的数字 - 你没有花太多时间&#34;你不是&#34;阻止&#34;行太多了。等
对于其他技术(例如,当它不密集时),请参阅my blog on deleting in chunks。