基本上我試圖從每個url匹配的單詞中獲得總計數。我有這樣的SQL查詢:優化sql查詢,即使對於小數據也太慢
select w.url, w.word, w.count, (
select sum(w2.count)
from wordcounts w2 where w2.url = w.url and w2.word in ('search', 'more')
) as totalcount
from wordcounts w
where w.word in ('search', 'more')
我使用此查詢得到這樣的結果:
URL | word | count | Total Count
http://haacked.com/ | more | 61 | 62
http://haacked.com/ | search | 1 | 62
http://feeds.haacked.com/haacked | more | 58 | 59
http://feeds.haacked.com/haacked | search | 1 | 59
http://www.asp.net/privacy | more | 7 | 13
http://www.asp.net/privacy | search | 6 | 13
我原來的表結構
ID | URL | word | count
但問題是,這小型查詢需要花費太多時間。 7+秒以上在幾千行上查詢。我該如何優化這個查詢?
我從另一個網站得到了這個語法,但它給錯誤。
select id, url, word, count,
sum(count) over(partition by url) as count_sum
from wordcounts where word in ('search', 'more') order by url
Error code 1064, SQL state 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(partition by url) as count_sum
from wordcounts where word in ('search', 'more')' at line 2
Line 1, column 1
Execution finished after 0 s, 1 error(s) occurred.
在整個查詢之前鍵入'EXPLAIN'並將輸出附加到帖子中。 – 2013-05-10 13:10:30
你有什麼指標在你的桌子上?你試過解釋查詢嗎? – GordonM 2013-05-10 13:17:02
您是否只希望那些既包含搜索詞的網址,也包含那些包含*或*搜索詞的網址? – 2013-05-10 13:20:35