インデックス失敗の例: 1. like クエリが「%」で始まる; 2. or ステートメントの前後でインデックスが使用されていない; 3. 最初の列のインデックスが結合インデックスで使用されていない; 3. 最初の列のインデックスが結合インデックスで使用されていない。 4. インデックス列の「IS NULL」または「IS NOT NULL」操作で使用されます。 5. インデックス フィールドで「not」、「<>」、「!=」などを使用します。
このチュートリアルの動作環境: Windows7 システム、mysql8 バージョン、Dell G3 コンピューター。
インデックスは、データ テーブル内の 1 つ以上の列で構成される特別なデータベース構造であり、データ テーブル内の特定の値を持つレコードを迅速にクエリするために使用できます。ここではインデックスの意味や機能、メリット・デメリットについて詳しく解説します。
インデックスを使用してデータをクエリする場合、レコード内のすべての情報を読み取る必要はなく、インデックス列をクエリするだけで済みます。それ以外の場合、データベース システムは照合のために各レコードのすべての情報を読み取ります。
この索引は、新華辞典の発音順序と比較できます。たとえば、「く」という単語を調べたい場合、発音順序を使用しない場合、400 ページの辞書からページごとに検索する必要があります。ただし、ピンインを抽出して発音シーケンスを作成する場合は、10 ページを超える発音表から直接検索するだけで済みます。これにより時間を大幅に節約できます。
したがって、インデックスを使用すると、データベースのクエリ速度が大幅に向上し、データベース システムのパフォーマンスが効果的に向上します。
インデックス クエリが失敗するいくつかの状況:
2. インデックスは or ステートメントの前後で同時に使用されません。
or の左側と右側のクエリ フィールドの一方のみがインデックスである場合、インデックスは無効になります。or の左側と右側のクエリ フィールドの両方がインデックスである場合にのみ有効になります
#3. 最初の列のインデックスを使用する代わりに結合インデックスを使用すると、インデックスは無効になります。
4. 列の型が文字列の場合、データは引用符で囲む必要があります。そうしないとインデックスは使用されません
データ型で暗黙的な変換が発生します。 varchar が一重引用符で囲まれていない場合、自動的に int 型に変換され、インデックスが無効になり、テーブル全体のスキャンが発生する可能性があります。
5. インデックス列に対して IS NULL または IS NOT NULL 操作を使用します。
インデックスは null 値にインデックスを付けないため、このような操作はインデックスを使用できず、数値型、0 より大きいかどうかを判断する、文字列型でデフォルト値を設定する、それを判断するなどの他の方法で処理できます。デフォルト値と同じにすることができます。 (これは間違っています!)
上記のエラーの説明:
再作成しますemp テーブル
#新しいインデックスの作成
#インデックスの表示##SQL ステートメントを実行します
#インデックスが使用されていることがわかります
#概要: インデックス列に対して IS NULL または IS NOT NULL 操作を使用しても、インデックスが必ずしも無効になるわけではありません。 ! !
6. インデックス フィールドでは not、<>、!= を使用します。
不等号演算子はインデックスを使用しないため、その処理ではテーブル全体のスキャンのみが行われます。最適化方法: key0 を key>0 または key
#7. インデックス フィールドで計算操作を実行し、フィールドで関数を使用します。 (インデックスは emp(ename,empno,sal) です)
8. テーブル全体のスキャン速度インデックス速度が速い場合、mysql はテーブル全体のスキャンを使用し、この時点でインデックスは失敗します。
mysql がインデックスを使用するよりもテーブル全体のスキャンの方が速いと推定した場合、インデックスは使用されません[関連する推奨事項:mysql ビデオ チュートリアル]
以上がmysql インデックスが失敗する状況は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。