繁体   English   中英

提高SQL语句的效率

[英]Improving efficiency of SQL statement

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

以下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服务器,因为这是我通常使用的。 目前没有索引集。

提高效率是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性能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM