数日前、同僚からMySQLのインデックスについて質問を受けました。大体わかっているのですが、まだ練習したいと思っています。is nullやis not nullなどのクエリにインデックスを使用できますか?インターネット上の記事ではインデックスは使用できないと書いてあるかもしれませんが、実際にはそうではありません。小さな実験を見てみましょう。 テーブル `null_index_t` を作成します ( `id` int(10) 符号なし NOT NULL AUTO_INCREMENT, `null_key` varchar(255) デフォルト NULL, `null_key1` varchar(255) デフォルト NULL, `null_key2` varchar(255) デフォルト NULL, 主キー (`id`)、 キー `idx_1` (`null_key`) BTREE 使用、 キー `idx_2` (`null_key1`) BTREE 使用、 キー `idx_3` (`null_key2`) BTREE 使用 )ENGINE=InnoDB デフォルト文字セット=utf8mb4; ストアドプロシージャを使用してデータを挿入する 区切り文字 $ # 区切り文字を使用してストアド プロシージャの終了をマークします。$ はストアド プロシージャの終了を示します。create procedure nullIndex1() 始める iをintとして宣言します。 j int を宣言します。 i=1 に設定します。 j=1 に設定します。 i<=100の間、 while(j<=100) 実行する (i % 3 = 0) ならば null_index_t ( `null_key`, `null_key1`, `null_key2` ) VALUES (null 、 LEFT(MD5(RAND()), 8), LEFT(MD5(RAND()), 8) ) に INSERT します。 そうでなければ (i % 3 = 1) null_index_t ( `null_key`, `null_key1`, `null_key2` ) VALUES (LEFT(MD5(RAND()), 8), NULL, LEFT(MD5(RAND()), 8)); に挿入します。 それ以外 null_index_t ( `null_key`, `null_key1`, `null_key2` ) VALUES (LEFT(MD5(RAND()), 8), LEFT(MD5(RAND()), 8), NULL) に挿入します。 終了の場合; j=j+1 と設定します。 終了しながら; i=i+1 と設定します。 j=1 に設定します。 終了しながら; 終わり $ nullIndex1() を呼び出します。 次に、is nullクエリを見てみましょう EXPLAIN select * from null_index_t WHERE null_key が null の場合; 別のものを見てみましょう EXPLAIN select * from null_index_t WHERE null_key が null ではない; ここから何が見えるでしょうか?考えてみましょう。 上記から、is null はインデックス付けする必要があることがわかります。したがって、少なくともこれは包括的なルールではありません。ただし、is not null は機能しないようです。小さな変更を加えて、このテーブルのデータの 9100 を null にし、残りの 900 に値を持たせて、次のコマンドを実行してみましょう。 それでは実行結果を見てみましょう EXPLAIN select * from null_index_t WHERE null_key が null の場合; EXPLAIN select * from null_index_t WHERE null_key が null ではない; 違うのでしょうか?ここで付け加えておきたいのは、実験に使用したMySQLは5.7であり、他のバージョンとの整合性は保証されていないということです。 上記は、MySQL インデックスに関する詳細を共有する詳細な内容です。MySQL インデックスの詳細については、123WORDPRESS.COM の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
>>: vue3 キャッシュページキープアライブと統合ルーティング処理の詳細な説明
Vue ファースト スクリーン パフォーマンス最適化コンポーネントVue ファースト スクリーン パ...
Vue での img の動的スプライシングを見てみましょう。src 画像アドレス、具体的な内容は次の...
ここ数年、Web デザインには「全幅背景と固定幅コンテンツ」というトレンドが生まれています。このデザ...
目次1. Bootstrap5 ブレークポイント1.1 モバイルファースト1.2 ブートストラップブ...
この記事では主に、CSS3 フレックスレイアウトを使用して要素を均等に配置する方法を紹介します。自分...
質問Docker が elasticsearch をインストールして起動するときにメモリが不足するシ...
この記事では、階段スライド効果を実現するためのjQueryの具体的なコードを参考までに紹介します。具...
前回、私たちは 2 つのヘッダー レイアウト (フレックスボックス 1 つとフロート 1 つ) を考...
この記事では、期間限定フラッシュセール機能を実装するためのJavaScriptの具体的なコードを参考...
Springboot プロジェクトを開始するには、次の 3 つの方法があります。 1. メインメソッ...
スロークエリログ関連のパラメータMySQL スロー クエリ関連のパラメータの説明: slow_que...
機能別に並べ替えNN: このタグをサポートする Netscape の以前のバージョンを示しますIE:...
OS X 環境で MySQL を起動すると、エラー メッセージが表示されます。 016-03-03T...
MySQL では、テーブル名の大文字と小文字の区別の問題が発生する可能性があります。実際、これはプラ...
目次js ディープコピーデータ保存方法浅いコピー/深いコピーとは何か一般的なディープコピーの実装1....