提高SQL语句的效率

时间:2012-12-13 10:39:16

标签: sql database performance

这是一个理论上的例子 - 我提出的一个问题是帮助我学习的一种方式。我很感激任何指针和解释,因为当谈到大型数据库时,我不仅仅是业余爱好者,而且渴望了解更多信息。

以下SQL即将在800万条记录的数据库上运行,可以采取哪些措施来提高效率?

SELECT
   email_subscribers_extra.sendscont,   
   email_list_subscribers_new.subscriberid,
   email_subscribers_extra.lastopen  
FROM 
   email_list_subscribers_new 
LEFT JOIN 
   email_subscribers_extra ON email_subscribers_extra.subscriberid = email_list_subscribers_new.subscriberid 
WHERE 
   email_list_subscribers_new.partner = 'AJ' 
ORDER BY 
   email_subscribers_extra.lastsend ASC LIMIT 0, 40000

编辑: 让我们假设它是一个Linux apache,mysql服务器就像我通常使用的那样。目前没有设置索引。

1 个答案:

答案 0 :(得分:2)

提高效率是SQL调优中的一个加载短语。您通常会添加索引以加快SELECT性能,但添加索引通常会降低更新速度。每个INSERT和DELETE语句都需要重写索引。许多UPDATE语句也需要重写索引。

没有查看执行计划,也没有考虑对INSERT,UPDATE和DELETE语句的影响,我建议在

上添加索引
  • WHERE子句中使用的每一列
  • JOIN条件中使用的每一列,
  • ORDER BY中使用的每一列。

大多数dbms会自动为外键引用中使用的列添加索引。但是至少其中一些会让你稍后放弃该索引。

因此,在这些列上添加索引,或确保支持外键约束的索引存在。

  • email_list_subscribers_new.subscriberid
  • email_list_subscribers_new.partner
  • email_subscribers_extra.subscriberid
  • email_subscribers_extra.lastsend

在某些情况下,一个多列索引将为您提供比两个单列索引更好的SELECT性能。