ホームページ  >  記事  >  データベース  >  mysql のインデックスが失敗する理由は何ですか?

mysql のインデックスが失敗する理由は何ですか?

WBOY
WBOY転載
2023-05-29 21:22:293128ブラウズ

1. In query

In query は MySQL でよく使われるクエリメソッドで、1 つのクエリで複数の値または複数の範囲をクエリできます。マッチを作ります。例:

SELECT * FROM table WHERE col1 IN (1,2,3);

この SQL ステートメントは、col1 列で 1、2、または 3 に等しい行をすべて検索します。 in クエリの処理中に、MySQL は括弧内の各値をインデックスと比較するため、in クエリはインデックスの効率に一定の影響を与えます。

2. インデックスが失敗する理由

  1. クエリ範囲が大きすぎます

データ クエリ範囲が大きすぎる場合、MySQL はインデックスを使用するよりもテーブル全体のスキャンを通じてデータを検索する方が効率的であると判断します。たとえば、テーブルに 100,000 のレコードがあり、クエリ範囲がレコードの 25% を超えた場合、MySQL はクエリにインデックスを使用する代わりにテーブル全体のスキャンを選択します。したがって、クエリ範囲が大きすぎると、インデックスが失敗する可能性があります。

  1. 値の数が多すぎます

MySQL は、テーブル全体のスキャンの方が、インデックス。クエリ内で一致する必要がある場合。値が多すぎる場合。現時点ではインデックスの意味はあまり大きくありません。したがって、クエリで使用する場合は、一致する値の数をできるだけ減らすように努める必要があります。

3. 最適化方法

  1. クエリ文を最適化します

クエリ文のスコープと範囲を縮小します。照合する必要がある値の数については、次の方法でクエリ ステートメントを最適化できます:

a. クエリの where 条件を最適化し、AND 論理コネクタを使用します。可能な限り、OR 論理コネクタの使用を減らします。

b. クエリ内ではなく範囲クエリを使用します。たとえば、IN の代わりに BETWEEN 演算子と AND 演算子を使用します。

c. in クエリ内の値リストをできる限り減らし、サブクエリを使用して最適化します。例:

SELECT * FROM table WHERE col1 IN (SELECT col1 FROM table WHERE col2='xxx');
  1. インデックスの追加

テーブルを作成するときに、クエリ対象の列をインデックス列として設定すると、クエリの効率が向上します。クエリでは可能な限り を使用します。

以上がmysql のインデックスが失敗する理由は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。