私は地理的にイベントをリストアップしているデータベースを持っています(現在はデータベース内の100000件近くのイベント)。テーブルtevent
のイベントには、外部キーがあり、テーブルtvenue
の外部キーがfkcity
であり、続きtregion
とtcountry
のイベントが発生しています。ほとんどのイベントで国を見つけるため最も速いクエリ応答のために複数のテーブル構造を選択する方法
クエリは劣らず3以上の内側で、そのためかなり複雑である加入:
select r.fkcountry,count(distinct e.id) from tevent e inner join tvenue v on e.fkvenue=v.id inner join tcity cy on v.fkcity=cy.id inner join tregion r on cy.fkregion=r.id group by r.fkcountry order by count(distinct e.id) desc
私は物事をスピードアップする方法を見つけようとしている、と私はそれを考えましたイベントを国別に直接マッピングすると役に立ちます。私は以下のはるかに簡単な結果構文で、マップテーブルteventcountry
を作成しました:私の驚きに
select ec.fkcountry,count(distinct e.id) from tevent e inner join teventcountry ec on ec.fkevent=e.id group by ec.fkcountry order by count(distinct e.id) desc
、これは正反対の効果があった:新しいクエリが古い、はるかに限り、ほぼ5倍を取りました複雑なクエリ。
誰かがこれを説明したり、マルチテーブルクエリの速度を理解するのに役立つ優れたリソースを教えてもらえますか?あるいは、私にこのようなことのための好ましいパターンを教えてください?
(誰もが尋ねる前に、私はタイミング結果が有効にするために実行間の「リセットクエリキャッシュ」を行うために世話をしてきました、はい、私はきちんとすべてをインデックス化している!!!!)
ありがとう
デビット