最初に、私はすでにここでいくつかの答えを見つけました:Would I observe a performance increase if I created a separate index for a single field that was already indexed in a covering index?2フィールド以上のMysqlのユニークなインデックスは、パフォーマンスを向上させるためにセットの1つのフィールドに必要な別のインデックスですか?
しかし、答えは古いですし、今日の技術のためにもはや正しくないかもしれません。 私は最新のMariaDb(10.1)とmysql(5.7.x)サーバをInnoDBで動作させています。
ので
o
と
CREATE TABLE `unittest_type_user_dataoptional` (
`id` BIGINT(18) UNSIGNED NOT NULL AUTO_INCREMENT,
`o` BIGINT(18) UNSIGNED NULL DEFAULT NULL,
`k` VARCHAR(150) NULL DEFAULT NULL COLLATE 'utf8mb4_unicode_ci',
`v` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8mb4_unicode_ci',
PRIMARY KEY (`id`),
UNIQUE INDEX `ok` (`o`, `k`)
)
私が作業するための最高の性能を持つようにしたい
(など、ここで、順に参加する。)ともo
+ k
としかれていることを確認しますのは、私は、このテーブルを持っているとしましょうo
+ k
の1つの組み合わせが存在する可能性があります。私のケースに別のインデックスが必要ですか?
私はそれがユニークなインデックスok
ですでにカバーされていることを前提としていますが、私はインデックスとそのパフォーマンスを分析する専門家ではありません。私は、組み合わせられたインデックスがカバーされるときとそうでないとき、簡単な説明を見つけることができません。
結合インデックスを使用すると、常に一番左の部分を読み取ることになります。これはどういう意味ですか?それは、テーブル内のフィールドの順序が重要であるか、インデックス自体のフィールドの順序が重要か、あるいはその両方かどうかを意味しますか?
ので、ここでこれはインデックス
SELECT * FROM `unittest_type_user_dataoptional` WHERE o = 200;
SELECT * FROM `unittest_type_user_dataoptional` ORDER BY o;
もここ
そしてこの
SELECT * FROM `unittest_type_user_dataoptional` WHERE o = 200 && k = 'farmer';
SELECT * FROM `unittest_type_user_dataoptional` ORDER BY o, k;
そして、これここにいない
SELECT * FROM `unittest_type_user_dataoptional` WHERE k = 200;
SELECT * FROM `unittest_type_user_dataoptional` ORDER BY k;
を利用しますが、その本当ですか?