2013-07-31 98 views
1

我仍然是新來的sql和我的代碼需要太長時間才能運行。SQL查詢太長了,有沒有辦法清除代碼?

這是我的代碼

SELECT SUM(b.matchusertime) 
FROM(
SELECT fulldate, realmatchid, isclanmatch 
FROM go_int.int_match 
WHERE (fulldate BETWEEN '2013-06-30' AND '2013-07-27') AND isclanmatch = 0 
GROUP BY realmatchid)a 
INNER JOIN go_int.int_match_user b 
ON b.realmatchid = a.realmatchid 
WHERE (b.fulldate BETWEEN '2013-06-30' AND '2013-07-27') 

什麼,我試圖做的,是採取從匹配表,該表是不是在一個戰隊匹配的用戶ID和與之相匹配到match_user表中查找出的總持續時間的非氏族比賽。

但每次我運行查詢時,它需要像45分鐘以上犯規還給我結果是因爲超時問題等

+0

表格有多大?你使用的是哪個數據庫?你有什麼指標在桌子上? –

+0

這些表格非常龐大,超過500,000行。 匹配可能有大約8列,對於匹配用戶,它有大約15列。 – user2129608

+0

不知道你當前的索引和你正在使用的數據庫以及查詢的查詢計劃,任何關於性能的提示都只是猜測。 –

回答

0
SELECT SUM(b.matchusertime) 
FROM(
SELECT fulldate, realmatchid, isclanmatch 
FROM go_int.int_match INNER JOIN go_int.int_match_user b 
ON b.realmatchid = a.realmatchid 
WHERE (fulldate BETWEEN '2013-06-30' AND '2013-07-27') AND isclanmatch = 0 
GROUP BY realmatchid)a 

我修改了相同query.Just使用該給一試一。如果您可以將虛擬數據粘貼到示例表結構中,它可以幫助我們提供支持。謝謝。

+0

嗨,它返回一個錯誤(1052)。說明完整日期模糊 – user2129608

+0

在哪裏條件提及fulldate和isclanmatch是從哪個表。例如: - yourTable.fulldate和yourTable.isclanmatch – maXfenda

+0

是的,我做到了。但它給了一個錯誤。 'SELECT SUM(b.matchusertime) FROM(SELECT fulldate,realmatchid,isclanmatch FROM go_int.int_match一個INNER JOIN go_int.int_match_user b ON b.realmatchid = a.realmatchid WHERE(b.fulldate'之間2013-06-30'AND'2013-07-27')AND b.isclanmatch = 0 GROUP BY realmatchid)a' – user2129608

0

子查詢將在連接表中的每一行運行。解決此問題的方法是將子查詢嵌套在另一個select語句中。這將導致從子查詢創建派生表(存儲在內存中的臨時表),並且不需要爲每行都運行該表。

SELECT SUM(b.matchusertime) 
FROM (
    SELECT * FROM (
    SELECT fulldate, realmatchid, isclanmatch 
    FROM go_int.int_match 
    WHERE (fulldate BETWEEN '2013-06-30' AND '2013-07-27') AND isclanmatch = 0 
    GROUP BY realmatchid 
) dt 
) a 
INNER JOIN go_int.int_match_user b ON b.realmatchid = a.realmatchid 
WHERE b.fulldate BETWEEN '2013-06-30' AND '2013-07-27'; 
+0

其實,從頭開始那只是依賴子查詢的情況 – bstonehill

+0

所以,我對你的代碼做了什麼樣的修改? – user2129608

+0

它可以正常工作,仔細查看查詢後,我認爲這不是問題,你可以爲每張表發佈幾行樣例行預期結果的例子?也許有了更好的理解,我們可以提出一個更有效的查詢。 – bstonehill