2016-08-24 8 views
0

最初に、私はすでにここでいくつかの答えを見つけました: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; 

を利用しますが、その本当ですか?

答えて

1

私は、結合されたインデックスを使用するときには、常に一番左の部分を読んでいます。これはどういう意味ですか?それは、テーブル内のフィールドの順序が重要であるか、インデックス自体のフィールドの順序が重要か、あるいはその両方かどうかを意味しますか?

これは後で意味します。たとえば、(o,k,v)にインデックスがある場合は、o,o,kおよびo,k,vの検索に使用されますが、kまたはk,vではなく、部分的にはo,vではありません。ソートの場合は、o,kでソートすることができますが、k,oではソートできません。あなたの質問であなたが言ったことは、あなたがすでに知っているようです。

MySQLのドキュメントの第9章全体は最適化に関するもので、section 9.3はすべて最適化とインデックスについてのもので、あなたが探しているすべての答えを見つけることができます。

私のケースに別のインデックスが必要ですか?

は「時期尚早の最適化は諸悪の根源である」ということを忘れないでください。最初に制約(主キー、外部キー、固有キー)に基づいて索引を作成し、後で純粋最適化を行うための他の索引を心配します。テーブルが大きくなり、多くの要因に依存するため、インデックス作成戦略は時間とともに変化する可能性があります。あなたが別のインデックスが必要なポイントに達すると、それを知るでしょう、心配しないでください。

関連する問題