我有一个 '简单' 的查询: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