2

特定のテーブルの4つの異なる列を使用するクエリのパフォーマンスを向上させようとしている場合、4つの異なるインデックス(各列に個別に1つ)を作成する必要がありますか、それともすべての列を含む1つのインデックスを作成する必要がありますか?

4

3 に答える 3

2

私の経験では、4 つの値すべてを持つ 1 つのインデックスが最速です。where を使用する場合は、where に役立つ順序で列を配置するようにしてください。

于 2012-07-10T19:23:01.103 に答える
0

通常、単一のインデックスはインデックスのマージよりも効果的であるため、f1 = 1 AND f2 = 2 AND f3 = 3 AND f4 = 4単一のインデックスのような条件がある場合は正しい決定です。

最高のパフォーマンスを達成するには、カーディナリティ (個別の値の数) の降順でインデックス フィールドを列挙します。これは、分析される行数を減らすのに役立ちます。

4 フィールド未満のインデックスは、必要なメモリが少ないため、より効果的です。

http://www.mysqlperformanceblog.com/2008/08/22/multiple-column-index-vs-multiple-indexes/

于 2012-07-10T22:34:24.010 に答える
0

4 つの列すべてを含むインデックス。WHERE で使用される列が最初に移動し、== 比較を行う列が最初に移動する必要があります。

整数列を優先すると、より良い結果が得られる場合があります。YMMV。

たとえば、

 SELECT title, count(*) FROM table WHERE class = 'post' AND topic_id = 17
    AND date > @@BeginDate and date < @@EndDate;

topic_id、post、date、title の順にインデックスが作成されます。

インデックスの「タイトル」は、データベースがクエリに一致するレコードの「タイトル」の値を検索できるようにするためにのみ使用され、データ テーブルへの追加アクセスは必要ありません。

最初のフィールドのレコードの分布のバランスが取れているほど、最良の結果が得られます (この例では、行の 10% が topic_id = 17 であるとします。文字列比較を実行することなく、残りの 90% を破棄します) 'post' を使用 -- 文字列比較が特にコストがかかるわけではありません. データによっては、日付を最初にインデックス付けして後で投稿するか、日付を最初に MySQL PARTITION として使用する方がよい場合もあります。

于 2012-07-10T19:28:23.553 に答える