背景テーブルでは、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 メソッド
この記事では、React Native の基本をすでに理解していることを前提とし、ネイティブと Ja...
環境説明:実行中の MySQL 環境があります。以前の構成ファイルの設定が単純すぎたため (inno...
<fieldset>と<legend>については、ほとんどの人はおそらく馴染...
VMware Workstation を使用して Windows 10 で仮想マシンを開くと、VMw...
序文デフォルトでは、MySQL はデータベース クエリ データをキャッシュするために大きなメモリ ブ...
通常、コンポーネントのライフサイクルは、ビジネス ロジックが始まる場所です。ビジネスシナリオが複雑で...
目次1. カスタム指示の登録1.1. グローバルカスタム指示1.2. ローカルカスタム指示2. カス...
数日前、Server2019の正式版がリリースされたことを知り、面白半分でインストールしてみることに...
1. Linuxのインストール(rootユーザー操作) 1. vncserver をインストールしま...
1. データ整合性の概要1. データ整合性の概要データの冗長性とは、データベース内に重複したデータが...
序文MySQLでは、準備、実行、割り当て解除を正式にはPREPARE STATEMENTと呼びます。...
現在、アプリケーション開発は基本的にフロントエンドとバックエンドに分離されています。主流のフロントエ...
サブクエリの代わりにJOINを使用するMySQL はバージョン 4.1 以降で SQL サブクエリを...
目次単一コンテンツ投影マルチコンテンツ投影単一条件のコンテンツ投影アプリ-人物-htmlアプリ担当者...
一般的なアプリケーションでは、timestamp、datetime、int 型を使用して時間形式を保...