このようなテーブルがあります
CREATE TABLE values (
id int(10) auto_increment NOT NULL,
molecule_id int(5) NOT NULL,
descriptor_id int(5) NOT NULL,
T double DEFAULT NULL,
value double NOT NULL,
PRIMARY KEY (id),
KEY index1 (molecule_id, T),
KEY index2 (descriptor_id, T)
) ENGINE=InnoDB;
テーブルの行は、3000 の記述子 ID、600 の分子 ID、およびランダムな double 値を持つ 3500 の T の多数の組み合わせです (約 20 億行)。
私は次のようなクエリの場合、という印象を受けました
SELECT T, value FROM values WHERE molecule_id = X AND descriptor_id = Y
mysql は両方のキーを使用し、結果を交差させます。しかし、Explain extended
このクエリを実行すると、index1 と index2 の間で選択されており、index2 のみが使用されていることがわかります。
Molecule_id = X はテーブルの約 1/600 にヒットします。descriptor_id = Y は、Y に応じて、テーブルのテーブルのごく一部 (0.001% など) または約 1/700 にヒットします。
index2 を使用して残りの約 250 万行をスキャンするよりも、交差する方が高速であるように思われます。3000 の descriptor_id が均等に分散されたとしても、平均で 800,000 行をスキャンする必要があります。
私は何が欠けていますか?