Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
提高SQL语句的效率_Sql_Database_Performance - Fatal编程技术网

提高SQL语句的效率

提高SQL语句的效率,sql,database,performance,Sql,Database,Performance,这是一个理论上的例子——有人提出了一个问题来帮助我学习。我很感激任何指点和解释,因为当涉及到大规模数据库时,我不仅仅是业余爱好者,而是渴望了解更多 下面的SQL即将在一个包含800万条记录的数据库上运行,如何提高效率 SELECT email_subscribers_extra.sendscont, email_list_subscribers_new.subscriberid, email_subscribers_extra.lastopen  FROM em

这是一个理论上的例子——有人提出了一个问题来帮助我学习。我很感激任何指点和解释,因为当涉及到大规模数据库时,我不仅仅是业余爱好者,而是渴望了解更多

下面的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子句中使用的每一列
  • 联接条件中使用的每一列
  • 订单中使用的每一列都由
大多数dbms会自动向外键引用中使用的列添加索引。不过,至少其中一些会让你在以后删除该索引

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

  • 电子邮件\u列表\u订阅者\u new.subscriberid
  • 电子邮件\u列表\u订户\u新合作伙伴
  • 电子邮件\u订户\u额外订阅ID
  • 电子邮件\u订户\u extra.lastsend

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

首先:
LIMIT
不是任何ANSI/ISO SQL标准的一部分。。。因此,您已经非常明确了哪些数据库系统将支持此功能……表上是否有任何索引?解释计划将比这里的任何人更好地告诉您。是否有一种形式的phpmyadmin解释计划?我以前从未遇到过这个,它看起来很神奇。