我有一個 '簡單' 的查詢:MySQL的複製到tmp下表造成掛
SELECT searchterm, count(searchterm) as intNumHits
FROM site_searches
WHERE searchdate >= 20151202 AND searchdate <= 20151202
GROUP BY searchterm
ORDER BY intNumHits DESC
LIMIT 50;
site_searches爲> 750萬行。
searchterm & searchdate被編入索引。
從這裏上其他的答案中,max_heap_table_size和tmp_table_size的受到質疑。我的設置是:
max_heap_table_size:16777216
tmp_table_size的:264241152
但是,當我運行查詢,它似乎掛在 「複製到tmp下表」。
如果我刪除count(searchterm)和GROUP BY選項,查詢將運行,但仍需要19秒!
有沒有人有任何建議?
編輯:
運行EXPLAIN的查詢提供了以下:
id = 1
select_type = SIMPLE
table = site_searches
type = index
possible_keys = searchdate
key = searchterm
key_len = 767
ref = NULL
rows = 7431801
Extra = Using where; Using temporary; Using filesort
感謝
有關於searchdate和intNumHits和searchterm的好索引嗎? – Thomas
嘗試使用EXPLAIN提前執行查詢(EXPLAIN SELECT等),併發布結果。通過解釋,我們可以看到查詢如何使用索引。 – faster2b
show desc site_searches,看看如果searchdate是int?如果它的char,那麼使用引號ex。 '20151202' – Hytool