2013-02-19 93 views
-2

我有三个表约5K行,每行加速MySQL查询

USERSid, email

FLASH2TIMBRESid, id_user, photo_name, valid

票数id, id_user, id_photo

我使用此查询,使我的网站运行非常缓慢。

SELECT users.email, 
     flash2timbres.id, 
     flash2timbres.id_user, 
     flash2timbres.photo_name, 
     flash2timbres.time, 
     COUNT(votes.id) AS nbvotes 
FROM users, flash2timbres 
     LEFT JOIN votes 
      ON flash2timbres.id = votes.id_photo 
WHERE valid = 1 AND 
     flash2timbres.id_user = users.id 
GROUP BY flash2timbres.id 
ORDER BY `flash2timbres`.`id` DESC 
LIMIT 0, 30 

有人可以帮我改进吗?

编辑:索引是:

users.id PRIMARY (Type BTREE) Unique 
flash2timbres.id PRIMARY (Type BTREE) Unique 
votes.id PRIMARY (Type BTREE) Unique 
+0

你能后的表声明,请在id_user列索引。您可能应该拥有GROUP BY子句中SELECT的所有非聚合列。 – Kickstart 2013-02-19 09:16:56

+3

不应该在“ORDER BY DESC”中指定一列吗? – silkfire 2013-02-19 09:17:07

+0

是的,他应该在那里指定一个专栏。这是否意味着这个人从未执行过这个查询并测量了速度?那么他怎么可以要求改进呢? – Elisabeth 2013-02-19 09:21:26

回答

0

如果您还没有准备好,你应该在你的索引表看一看:http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html。如果不是在索引字段上执行连接,连接速度会很慢,特别是当数据集增长时。

一旦你添加了你的索引,在查询之前添加一个EXPLAIN并运行它。结果将确认查询现在使用新索引(在key列中)。

+0

谢谢。我猜我的数据库真的很基础。现在运行速度非常快。在索引之前,我甚至无法将EXPLAIN解释为服务器超时。 – 2013-02-19 10:54:21

0

上id_photo添加在投票表,也对flash2timbres表

+0

谢谢......你们救了我 – 2013-02-19 10:54:54