同じWHERE句を使用した同じテーブルに対する2つの異なるクエリ

ヨッシー

2つの異なるクエリがあります。しかし、それらは両方とも同じテーブルにあり、両方とも同じWHEREを持っています。したがって、彼らは同じ行を選択しています。

クエリ1:

SELECT HOUR(timestamp), COUNT(*) as hits 
FROM hits_table 
WHERE timestamp >= CURDATE() 
GROUP BY HOUR(timestamp)

クエリ2:

SELECT country, COUNT(*) as hits 
FROM hits_table 
WHERE timestamp >= CURDATE()
GROUP BY country

どうすればこれをより効率的にすることができますか?

O.ジョーンズ

このテーブルに正しくインデックスが付けられていれば、今日の行だけを見ているので、テーブル全体の大きさは正直問題ではありません。

テーブルのインデックスが正しくない場合、何をしてもこれらのクエリのパフォーマンスはひどいものになります。

あなたのWHERE timestamp >= CURDATE()句を使用すると、上のインデックス持っている必要があります意味timestampの列を。クエリの1つで、GROUP BY countryインデックスをカバーする複合語(timestamp, country)が非常に役立つことが示されています。

したがって、単一の複合インデックス(timestamp, country)は、質問の両方のクエリを満たします。

それがどのように機能するかを説明しましょう。今日のレコード(または特定のtimestamp値で開始および終了するレコード)を検索し、国ごとにグループ化してカウントするために、MySQLは次の手順を実行することでクエリを満たすことができます。

  1. ランダム-に一致する最初のレコードへのインデックスにアクセスしますtimestampO(log n)。
  2. インデックスから最初のcountry値を取得します
  3. インデックスとカウントの次のcountryまでスキャンします。オン)。
  4. timestamp範囲が終了するまで手順3を繰り返します。

このインデックススキャン操作は、エース開発者のチーム(MySQLチーム)が10年のハードワークで実現できるのとほぼ同じ速さです。(土曜日の午後にはそれらを上回ることができない場合があります。)MySQLは、インデックスの小さなサブセットでクエリ全体を満たします。したがって、背後にあるテーブルの大きさは実際には問題ではありません。

これらのクエリの1つを次々に実行すると、MySQLの一部またはすべてのインデックスデータブロックがRAMキャッシュに残っている可能性があるため、ディスクからそれらを再フェッチする必要がない場合があります。それはさらに役立ちます。

サンプルクエリがどのようにつながるかわかりますtimestampか?最も重要なWHERE基準は、タイムスタンプの範囲を選択します。そのため、私が提案した複合インデックスのtimestamp最初の列があります。countryその列の単純なインデックスにつながるクエリがない場合は、おそらく役に立たないでしょう。

あなたは本当に複合カバーインデックスが必要かどうか尋ねました。あなたは、おそらく必要があります読ん について どのように彼らは仕事と自分のためにその決定を下します。

インデックスの選択には明らかにトレードオフがあります。各指標は、プロセス減速INSERTUPDATE少し、そして多くのクエリをスピードアップすることができます。特定のアプリケーションのトレードオフを整理できるのはあなただけです。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

同じテーブルでwhere句が異なる2つのselectクエリ

分類Dev

同じテーブルの2つの異なるSumを同じ列に対してクエリしますが、条件は異なりますか?

分類Dev

SQL クエリ 同じテーブルを使用して 2 つの WHERE 句を比較する

分類Dev

countとgroupbyを使用した同じテーブルでの2つの異なるクエリ

分類Dev

同じWHERE句を持つ2つの異なるテーブルからSELECTFROM?

分類Dev

同じ異なるテーブルの列を使用したクエリ

分類Dev

同じ列の同じテーブルで異なる条件を使用してクエリを実行する

分類Dev

同じクエリで異なる情報を持つ2つのMySQLテーブルを結合します

分類Dev

同じデータを持つ2つのテーブルに対して実行されるクエリのパフォーマンスが異なる

分類Dev

同じテーブルから異なるWHERE句からの2つのSELECTクエリを組み合わせる

分類Dev

異なる月と合計値で同じテーブルの2つのクエリを結合します

分類Dev

SQL:3つの異なるwhere句を使用して同じ列を3回クエリします

分類Dev

異なる条件で同じテーブルの2つの列の値を分割する方法をSQLクエリ

分類Dev

group by句を使用したSQLクエリですが、2つの異なる値を同じであるかのようにカウントします

分類Dev

異なるテーブルからの同じクエリの2つの列を合計する

分類Dev

同じテーブルを参照する2つの外部キーに対するmysqlクエリ

分類Dev

同じ列名でマージされた2つのテーブルに対するクエリ

分類Dev

同じテーブルから、異なるフィルターを使用して、2つのSelect sum SQLクエリを結合できますか?

分類Dev

2つ以上の異なるSELECTクエリをPostgreSQLの異なる条件で同じテーブルに結合する

分類Dev

同じテーブルに対する複数のクエリ

分類Dev

Hibernate SQLクエリには2つの同じテーブルがあり、同じ名前で値が異なる列を返すことが期待されていますが、同じ値を返します

分類Dev

同じテーブルで異なる列を2回クエリする

分類Dev

動的SQLを使用せずに複数のテーブルに対して同じクエリを実行する

分類Dev

GroupBy句を使用した同じテーブルでのMYSQLサブクエリ...

分類Dev

Spring JPA:同じリクエストで2つの異なる「DataSource」の2つの異なるテーブルを更新する方法

分類Dev

同じテーブルの異なる列で異なるwhere句を使用してSQLステートメントを結合する方法

分類Dev

テーブル内の異なる値に対して同じ行を繰り返さずに2つのテーブルを結合する方法

分類Dev

PHPPDO同じクエリで2つのテーブルをクエリする

分類Dev

グループ句のために異なるネット値を持つ同じフィールドを比較するSQLクエリ

Related 関連記事

  1. 1

    同じテーブルでwhere句が異なる2つのselectクエリ

  2. 2

    同じテーブルの2つの異なるSumを同じ列に対してクエリしますが、条件は異なりますか?

  3. 3

    SQL クエリ 同じテーブルを使用して 2 つの WHERE 句を比較する

  4. 4

    countとgroupbyを使用した同じテーブルでの2つの異なるクエリ

  5. 5

    同じWHERE句を持つ2つの異なるテーブルからSELECTFROM?

  6. 6

    同じ異なるテーブルの列を使用したクエリ

  7. 7

    同じ列の同じテーブルで異なる条件を使用してクエリを実行する

  8. 8

    同じクエリで異なる情報を持つ2つのMySQLテーブルを結合します

  9. 9

    同じデータを持つ2つのテーブルに対して実行されるクエリのパフォーマンスが異なる

  10. 10

    同じテーブルから異なるWHERE句からの2つのSELECTクエリを組み合わせる

  11. 11

    異なる月と合計値で同じテーブルの2つのクエリを結合します

  12. 12

    SQL:3つの異なるwhere句を使用して同じ列を3回クエリします

  13. 13

    異なる条件で同じテーブルの2つの列の値を分割する方法をSQLクエリ

  14. 14

    group by句を使用したSQLクエリですが、2つの異なる値を同じであるかのようにカウントします

  15. 15

    異なるテーブルからの同じクエリの2つの列を合計する

  16. 16

    同じテーブルを参照する2つの外部キーに対するmysqlクエリ

  17. 17

    同じ列名でマージされた2つのテーブルに対するクエリ

  18. 18

    同じテーブルから、異なるフィルターを使用して、2つのSelect sum SQLクエリを結合できますか?

  19. 19

    2つ以上の異なるSELECTクエリをPostgreSQLの異なる条件で同じテーブルに結合する

  20. 20

    同じテーブルに対する複数のクエリ

  21. 21

    Hibernate SQLクエリには2つの同じテーブルがあり、同じ名前で値が異なる列を返すことが期待されていますが、同じ値を返します

  22. 22

    同じテーブルで異なる列を2回クエリする

  23. 23

    動的SQLを使用せずに複数のテーブルに対して同じクエリを実行する

  24. 24

    GroupBy句を使用した同じテーブルでのMYSQLサブクエリ...

  25. 25

    Spring JPA:同じリクエストで2つの異なる「DataSource」の2つの異なるテーブルを更新する方法

  26. 26

    同じテーブルの異なる列で異なるwhere句を使用してSQLステートメントを結合する方法

  27. 27

    テーブル内の異なる値に対して同じ行を繰り返さずに2つのテーブルを結合する方法

  28. 28

    PHPPDO同じクエリで2つのテーブルをクエリする

  29. 29

    グループ句のために異なるネット値を持つ同じフィールドを比較するSQLクエリ

ホットタグ

アーカイブ