mysql (innodb) は、(A) または (B) のようなクエリのより高いレート (1 秒あたりのクエリ数) をサポートしますか?
(ア)SELECT * FROM t1 WHERE pkey BETWEEN 2000 and 2001 AND x > 300
(A) では、主キーは 800 行の範囲を選択します。「x」は索引付けされていません。1 つの範囲ルックアップと、長さ 200kb の 1 つの連続読み取りがあります。
(ロ)(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」は索引付けされていません。2 つの範囲ルックアップと、長さ 50kb の 2 つの連続読み取りがあります。
要約すると、(A) のディスク シークは 2 倍ですが、連続読み取りは 1/2 です。逆に、(B) はディスク シークが半分ですが、連続読み取りは 2 倍です。
一般に、シークは遅く、連続した読み取りは高速だと思いますが、10MB の余分なデータを読み取るよりも、1 回余分にシークする方が望ましいと思います。大まかに言って、トレードオフポイントはどこですか?