为MySQL中的Join表创建索引

时间:2018-05-21 04:25:20

标签: 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

你能帮我创建一些索引来提高这个查询的性能吗? 感谢

2 个答案:

答案 0 :(得分:0)

如果以下三个复合索引带来任何改进,您可以尝试。

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作为最后一列。 E.g。

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

如果total位于vtiger_salesorder。然后有可能只有索引被单独查询。

答案 1 :(得分:0)

这些索引可能有所帮助:

crmentity:   (deleted, modifiedtime)  -- in this order
salesorder:  (salesorderid)

但是...

  • 如果所有JOINs都是1:1,则只需要包含total的表格。
  • 如果某些JOINs为1:许多, then COUNT(*)and/or SUM(总计)`将获得膨胀值!