慢速Sql执行

时间:2014-09-20 18:15:07

标签: php mysql sql exec

我有一个包含至少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

2 个答案:

答案 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