我有一个包含至少60,000行的表。我的查询只是基本的,它是这样的:
SELECT `table`.name, `table`.age, `table`.points
FROM table
GROUP BY name, age
ORDER BY date
DESC
LIMIT 12
结果就像(总共12次,查询花了1.2211秒),有时甚至需要2秒才能返回12行。
应该怎么做才能让我的查询更快?
EXPLAIN QUERY:
id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
1 Extra table ALL NULL NULL NULL NULL 65704 Using temporary; Using filesort
答案 0 :(得分:1)
评论太长了。 日期索引会有所帮助,没有它就会被迫进行表扫描。 还有什么是名称的基数,即不同名称的数量除以行数?如果它是低的,你可以创建一个具有这些不同名称和JOIN的表,目的是进行松散的索引扫描。 首先尝试一个组合索引:
ALTER TABLE t1 ADD KEY indexName (name,age,date)
有关详细信息,请在查询前添加EXPLAIN
,然后根据结果修改问题。
答案 1 :(得分:0)
您可能希望在SQL数据库中创建索引。 如果你正在使用MYSQL,你可以像这样创建它们
ALTER TABLE TABLE_NAME ADD INDEX (COLUMN_NAME);
对于你的情况,它将是:
ALTER TABLE `table` ADD INDEX (name);
ALTER TABLE `table` ADD INDEX (age);
ALTER TABLE `table` ADD INDEX (points);
您可能还想查看this question