我有一个至少包含6万行的表。我的查询是基本的,如下所示:
SELECT `table`.name, `table`.age, `table`.points
FROM table
GROUP BY name, age
ORDER BY date
DESC
LIMIT 12结果类似于(12次总计,查询花费了1.2211秒),有时甚至需要2秒才能返回12行。
应该做些什么使我的查询更快?
解释查询:
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发布于 2014-09-20 18:24:13
这太长了,不能发表评论。日期索引将有所帮助,如果没有它,它将被迫进行表格扫描。还有什么是名称的基数,即在行数上划分的不同名称的数量?在低的情况下,您可以创建一个包含这些不同名称的表,并将其连接起来,目的是进行松散的索引扫描。首先,尝试一个组合索引:
ALTER TABLE t1 ADD KEY indexName (name,age,date)有关更多细节,请在查询之前添加一个EXPLAIN,并根据结果编辑问题。
发布于 2014-09-20 18:19:24
您可能希望在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
https://stackoverflow.com/questions/25951890
复制相似问题