1

以下に示すように、実行している非常に単純なクエリが 2 つあります。どちらにも、日付と必要な情報が 1 つ含まれています。クエリでそれらを単一のテーブルとして取得したい。どちらのクエリも、実行に約 0.03 秒かかります。私が彼らに参加しようとしたときはいつでも、彼らは永遠にかかります. 誰かがこの構文で私を助けてくれますか?

SELECT date(date) AS Day, sum(total) / 3600.0 AS Hours 
FROM events.Site_Total 
WHERE date > '2012-01-01' 
GROUP BY Day; 

SELECT date(sdate) AS Day, sum(arg) AS Count
FROM events.uptimer 
WHERE state > '2012-01-01' 
GROUP BY Day;

これが単純であることはわかっていますが、実行に永遠にかからない適切な JOIN 構文がわかりません。1 日に複数の全体が異なる時間であることに注意してください。そのため、date(date) のことを実行し、それによってグループ化していました。

ありがとう!

4

2 に答える 2

1

これがうまくいくことを願っています::

Select site.Day, site.Hours, uptimer.Day, uptimer.Count
from 
(SELECT date(date) AS Day, sum(total) / 3600.0 AS Hours 
FROM events.Site_Total 
WHERE DATE(date) > '2012-01-01' 
GROUP BY Day) as site 
inner join
(
SELECT date(sdate) AS Day, sum(arg) AS Count
FROM events.uptimer 
WHERE DATE(sdate)> '2012-01-01' 
GROUP BY Day) as uptimer 
on (site.Day=uptimer.Day) 
于 2012-06-14T05:32:40.510 に答える
0

少なくとも、結合する列の各テーブルにインデックスが追加されていることを確認する必要があります。したがって、日付列で結合している場合は、各テーブルに日付のインデックスがあることを確認してください。

考慮すべき 2 番目のことは、インデックスがクエリのカバーと呼ばれるものであるかどうかです。つまり、インデックスには、クエリを完了するために必要な列が (含まれる列として) 含まれています。あなたがリストしたものでは、これらの列は「Site_Total」テーブルの合計であり、「events.uptimer」テーブルの引数状態です。

于 2012-06-14T05:29:41.150 に答える