MySQL innodb寻求与连续读取权衡

时间:2010-02-26 03:05:40

标签: mysql io innodb disk

mysql(innodb)是否支持更高的查询率(每秒查询数),如(A)或(B)?

(A)SELECT * FROM t1 WHERE pkey BETWEEN 2000 and 2001 AND x > 300

在(A)中,主键选择800行的范围。 “x”未编入索引。有一个范围查找和一个长度为200kb的连续读取。

(B)(SELECT * FROM t1 WHERE pkey BETWEEN 2000 and 2001 AND x > 300) UNION ALL (SELECT * FROM t1 WHERE pkey BETWEEN 3000 and 3001 AND x > 300)

在(B)中,主键选择200行的范围。 “x”未编入索引。有两个范围查找和两个长度为50kb的连续读取。

总而言之,(A)有2倍的磁盘寻道,但是连续读数的1/2。相反,(B)有一半的磁盘寻找但是连续读数的2倍。

一般来说,我认为搜索是缓慢的,连续读取很快,但我认为一次额外搜索比读取10MB额外数据更可取。在哪里是权衡点,粗略?

2 个答案:

答案 0 :(得分:0)

优化器应该决定如何实现查询。只要按照你想要的方式写下它。

使用EXPLAIN大致了解它的功能。可能是它对pkey上的索引进行了两次范围扫描。

一般来说,阅读较少的行会更好。您还可以在缓冲池中保留更多它们。两种范围扫描优于一般情况下的扫描范围。

我假设你的桌子t1不完全适合记忆,在这种情况下,它主要是学术性的。

答案 1 :(得分:0)