背景テーブルでは、dataTime フィールドは varchar 型に設定され、保存されるデータは日付形式で、フィールドにインデックスが設定されます。しかし、ログ レコードには、このテーブルに関する遅いクエリがあります。クエリステートメントは次のとおりです。 探検する1:当初、dataTime フィールドの型が varchar であると考えられていたため、MySQL は日付のサイズ順ではなく文字列順にインデックスをソートし、範囲クエリを実行するときに日付順にインデックス範囲のパーティション分割を実行できませんでした。そこで、dataTime を datatime 型に変更してステートメントを分析したところ、依然として完全なテーブルスキャンが行われていることがわかりました。 2:クエリ条件の値を変更する digitaltwin_meteorological から count(*) を選択します。ここで、dataTime > '2021-10-15' です。 実行結果は3910です。 EXPLAIN デジタルツインのmeteorologicalから*を選択し、dataTime > '2021-10-15'を選択します。 SQL ステートメントの分析結果は、完全なテーブルスキャンです。 レコードの数を確認するために、クエリ条件を 16 に変更します。 digitaltwin_meteorological から count(*) を選択します。ここで、dataTime > '2021-10-16' です。 クエリ結果は 2525 です。16 番のクエリ ステートメントを分析してみましょう。 EXPLAIN デジタルツインのmeteorologicalから*を選択し、dataTime > '2021-10-16'を選択します。 実行結果は、インデックスを使用する範囲クエリです。 このことから、クエリされるレコードの数が多い場合、MySQL はフル テーブル スキャンの方が効率的であると判断してフル テーブル スキャンを実行することがわかります。クエリ内のレコードが少ない場合、MySQL はインデックス クエリを使用します。 3: dataTime を datetime データ型に変更した場合、クエリ条件に引用符を追加する必要がありますか? dataTime クエリ条件の引用符を削除して結果を確認します。 EXPLAIN digitaltwin_meteorological から * を選択し、dataTime > 2021-10-16 を指定します。
digitaltwin_meteorological から count(*) を選択します。ここで、dataTime > 2021-10-16 です。 計算結果は 19714 となり、これはテーブル全体のデータです。そのため、datetime クエリ条件も引用符で囲む必要があります。 4: 上記の分析はすべて、datetime 型の場合の dataTime に関するものです。元のフィールド タイプは varchar なので、これを varchar タイプに変更すると、上記の結論は依然として当てはまりますか? タイプを変更して、SQL を再度実行します。 EXPLAIN select * from digitaltwin_meteorological where dataTime > '2021-10-16'; varchar 型に変更すると、クエリ 16 は範囲スキャンではなくフル テーブル スキャンになることがわかります。 EXPLAIN デジタルツインのmeteorologicalから*を選択し、dataTime > '2021-10-17'を選択します。 17日のクエリではインデックスクエリが使用されました。 17日のデータ量は1749であることがわかります。 要約する上記の分析を通じて、次のような結論を導き出すことができます。 MySQL が日付フィールド インデックスを使用しない理由に関するこの記事はこれで終わりです。MySQL 日付フィールド インデックスに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: CSS スタイルで一般的なグラフィック効果を示すサンプルコード
>>: 入力ボックスのプレースホルダーテキストのデフォルトの色を変更する -webkit-input-placeholder メソッド
ブラウザ モジュールの主な機能は、http リクエスト ヘッダーの「User-Agent」の値とブラ...
承認とは、ユーザーに特定の権限を付与することです。たとえば、新しく作成したユーザーに、すべてのデータ...
FFMPEG 3.4.1 バージョンパラメータの詳細使用方法: ffmpeg [オプション] [[入...
前面に書かれたデータベースは本質的に共有リソースであるため、同時アクセスのパフォーマンスを最大化する...
まず、Webフロントエンドエンジニアの価値についてお話ししましょう。現在、Web製品のインタラクショ...
人気があり強力な Apache Web サーバーで 2 つ以上のサイトをホストする方法。前回の記事で...
lepus3.7 を使用して MySQL データベースを監視中に、次の問題が発生しました。このブログ...
背景最近、複数のプロジェクトを展開する際に、1 つのドメイン名で複数のプロジェクトにアクセスする方法...
この記事では、MySQL 5.7 zipアーカイブ版のインストールチュートリアルを参考までに紹介しま...
目次1. GTIDの基本概念2. GTIDの利点3. GTIDの仕組み4. 従来のレプリケーションに...
1. テーブルを作成する テーブル「学生」を作成( `id` int(11) NULLではない、 `...
目次問題の説明原因分析解決問題の説明最近、奇妙な問い合わせを受けました。更新ステートメントはエラーな...
<br />構造と階層により複雑さが軽減され、読みやすさが向上します。記事やサイトが整理...
1. 問題開発中に、他のデータベースから MySQL データベース テーブルにデータを挿入すると、次...
1. セットアップを始める次のコード関数を簡単に紹介します。 ref 関数を使用して変数の変更を監視...