mysql - 在 MySQL 中为连接某个表创建索引

标签 mysql sql database performance indexing

我对 MySQL 数据库有如下 SQL 查询:

SELECT
    count(*) AS count,
    sum(total) AS total
FROM
    vtiger_salesorder
INNER JOIN vtiger_crmentity ON vtiger_crmentity.crmid = vtiger_salesorder.salesorderid
INNER JOIN vtiger_sobillads ON vtiger_salesorder.salesorderid = vtiger_sobillads.sobilladdressid
INNER JOIN vtiger_soshipads ON vtiger_salesorder.salesorderid = vtiger_soshipads.soshipaddressid
INNER JOIN vtiger_salesordercf ON vtiger_salesordercf.salesorderid = vtiger_salesorder.salesorderid
INNER JOIN vtiger_account ON vtiger_account.accountid = vtiger_salesorder.accountid
LEFT JOIN vtiger_users ON vtiger_users.id = vtiger_salesordercf.cf_456
LEFT JOIN vtiger_contactdetails ON vtiger_salesorder.contactid = vtiger_contactdetails.contactid
LEFT JOIN vtiger_soshop ON vtiger_soshop.salesorderid = vtiger_salesorder.salesorderid
WHERE
    vtiger_crmentity.deleted = 0
ORDER BY
    vtiger_crmentity.modifiedtime DESC;

Please click here to show Explain above SQL

您能帮我创建一些索引来提高此查询的性能吗? 谢谢

最佳答案

您可以尝试以下三个复合索引是否有改善。

CREATE INDEX idxCrmidDeleted
             ON vtiger_crmentity
                (crmid,
                 deleted);

CREATE INDEX idxSalesorderidAccountidContactid
             ON vtiger_salesorder
                (salesorderid,
                 accountid,
                 contactid);

CREATE INDEX idxSalesorderidCf_456
             ON vtiger_salesordercf
                (salesorderid,
                 cf_456);

检查执行计划是否被执行。

total 列从何而来?如果它来自上面索引的任何表,也可以尝试像上面这样的索引,但另外将 total 作为最后一列。例如

CREATE INDEX idxSalesorderidAccountidContactid
             ON vtiger_salesorder
                (salesorderid,
                 accountid,
                 contactid,
                 total);

如果total位于vtiger_salesorder中。那么有可能只单独查询索引。

关于mysql - 在 MySQL 中为连接某个表创建索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50441992/

相关文章:

mysql - MYSQL 5.6.10 表中最大分区数

php - 我们如何烘焙 cakephp 上的查找字段?

sql - Select * from table with where and order by clause 问题

c# - 如何更改连接字符串初始目录

java - flyway 4.0 java base回调afterValidate没有捕获钩子(Hook)

Python 到 MySQLdb 不会传递变量我想我已经尝试了一切

php - 数据库自动更新

mysql - 计算贷款支付以及支付何时得到满足 - 允许部分支付

mysql - 优化查询以按联接表中的字段将结果分组

mysql - 如果使用 AVG 函数,SQL 查询结果将缩减为单个结果