Est-ce que mysql (innodb) supporterait un taux plus élevé (requêtes par seconde) de requêtes comme (A) ou (B)?MySQL innodb cherche vs contigu lit le compromis
(A) SELECT * FROM t1 WHERE pkey BETWEEN 2000 and 2001 AND x > 300
In (A), la clé primaire sélectionne une plage de 800 lignes. "x" est non indexé. il y a une recherche de gamme et une lecture contiguë de longueur 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)
Dans (B), la clé primaire sélectionne une plage de 200 lignes. "x" est non indexé. il y a deux recherches de gamme et deux lectures contiguës de longueur 50kb. Donc, pour résumer, (A) a 2x le disque cherche, mais 1/2ème autant de lectures contiguës. Inversement, (B) a la moitié du disque cherche mais 2x autant de lectures contiguës.
En général, je suppose que les recherches sont lentes et les lectures contiguës sont rapides, mais je suppose qu'une recherche supplémentaire est préférable à la lecture de 10 Mo de données supplémentaires. Où est le point de compromis, à peu près?
Les deux requêtes ne sont pas logiquement équivalentes. B inclut la plage 3000..3001, qui n'est pas incluse dans A. – Martin
Le résultat des requêtes sera le même, car les données sont organisées différemment dans les deux scénarios. Cela aurait dû être plus explicite; Je n'ai pas fait un très bon travail en posant la question. Je pense qu'il est temps d'arrêter de tenter de résoudre cela en théorie et de simplement comparer les deux approches. –