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额外数据更可取。在哪里是权衡点,粗略?
答案 0 :(得分:0)
优化器应该决定如何实现查询。只要按照你想要的方式写下它。
使用EXPLAIN大致了解它的功能。可能是它对pkey上的索引进行了两次范围扫描。
一般来说,阅读较少的行会更好。您还可以在缓冲池中保留更多它们。两种范围扫描优于一般情况下的扫描范围。
我假设你的桌子t1不完全适合记忆,在这种情况下,它主要是学术性的。
答案 1 :(得分:0)