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. インデックスが失敗する理由
クエリ範囲が大きすぎます
データ クエリ範囲が大きすぎる場合、MySQL はインデックスを使用するよりもテーブル全体のスキャンを通じてデータを検索する方が効率的であると判断します。たとえば、テーブルに 100,000 のレコードがあり、クエリ範囲がレコードの 25% を超えた場合、MySQL はクエリにインデックスを使用する代わりにテーブル全体のスキャンを選択します。したがって、クエリ範囲が大きすぎると、インデックスが失敗する可能性があります。
値の数が多すぎます
MySQL は、テーブル全体のスキャンの方が、インデックス。クエリ内で一致する必要がある場合。値が多すぎる場合。現時点ではインデックスの意味はあまり大きくありません。したがって、クエリで使用する場合は、一致する値の数をできるだけ減らすように努める必要があります。
3. 最適化方法
クエリ文を最適化します
クエリ文のスコープと範囲を縮小します。照合する必要がある値の数については、次の方法でクエリ ステートメントを最適化できます:
a. クエリの where 条件を最適化し、AND 論理コネクタを使用します。可能な限り、OR 論理コネクタの使用を減らします。
b. クエリ内ではなく範囲クエリを使用します。たとえば、IN の代わりに BETWEEN 演算子と AND 演算子を使用します。
c. in クエリ内の値リストをできる限り減らし、サブクエリを使用して最適化します。例:
SELECT * FROM table WHERE col1 IN (SELECT col1 FROM table WHERE col2='xxx');
インデックスの追加
テーブルを作成するときに、クエリ対象の列をインデックス列として設定すると、クエリの効率が向上します。クエリでは可能な限り を使用します。
以上がmysql のインデックスが失敗する理由は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。