0

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

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

4

1 回答 1

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 性能。

于 2012-12-13T11:09:06.553 回答