2011-11-19 243 views
2

长时间读者,第一次张贴海报。我有一个查询(下面),当客户有很多类别时,需要永远运行。我需要加速它,我不知道如何。任何援助非常感谢。慢SQL查询速度

SELECT pictures1.*, GROUP_CONCAT(cats_master.categoryName SEPARATOR ';') AS categoryNames 
      FROM pictures1 
       LEFT JOIN cats_contacts ON pictures1.id =cats_contacts.contact_id 
       LEFT JOIN cats_master ON cats_contacts.category_id = cats_master.id 
      WHERE pictures1.customer_id = (customer id goes here) 
      GROUP BY pictures1.id 
      ORDER BY pictures1.l_name ASC 

该查询的结果是一个客户可以下载的文件 - 问题似乎是类别片。

+1

'carddata'是什么? –

+0

对不起马克纠正。 – user1055739

回答

1

有以下指标将大大加速比查询:

id, l_name, customer_id: pictures table 
contact_id: cats_contacts table 
id, category_id: cats_master table 
+0

感谢Raihan--对于图片表格 - 你是在暗示这3个字段还是3个索引的索引?这部分对我来说有点混乱。 现在我有以下指标: cats_contacts:名称:CATEGORY_ID字段:CATEGORY_ID,CONTACT_ID < - 设置为一个指数,它看起来像,指数型独特 cats_master:一个关于CUSTOMER_ID,一个在类别名称(刚刚创建这个categoryName索引) - 索引类型正常 – user1055739

+0

(我已经尝试了大约100次来修复这个评论的外观,甚至阅读帮助文档,它仍然很难看。) – user1055739

+0

所有索引应该在单列上,根据您的查询不需要组合索引。所以'图片'表上的3个索引,'cats_contacts'上的1个,'cats_master'上的2个索引。如果任何列是主键,请将其设为唯一索引。 – Raihan

3

检查解释计划并在需要时添加索引。

0

我想尝试所有的ID的指数,+ l_name为最终排序。之后,这是坚韧不拔的时间。例如,你所有的“加入”ID都是相同的类型和大小。

PS查询计划说什么。

和外部机会重建索引,看看是否有所作为。

+0

谢谢托尼 - 不知道它是否重要,但解释确实说“使用临时文件,使用filesort” – user1055739

+0

您可以将它添加到问题?那么我们可能会给你更多的线索。 SQL性能调优和科学一样是一门艺术 –