簡體   English   中英

MySQL查詢性能提升

[英]MySQL query performance improvement

我對MySQL的性能有疑問。 我該如何改善? 情況如下:

  • 表“ backlogsap”具有約4個mio條目。
  • 創建索引
  • 該表具有FK,其他表具有FK到該表=>無法創建分區。
  • 此查詢大約需要140秒才能完成:

     select idmaterial, materialgroup, materialgroupcategory, name, dispatchgroup, idsupplier, group_concat(distinct sellingorganizationname) as sellingorganizationnames, group_concat(distinct idordertype) as idordertypes, group_concat(distinct idpositiontype) as idpositiontypes, sum(newOrUpdated and isCritical) as classA, sum(newOrUpdated and not isCritical) as classB, sum(processingstate <3) as classC, (select count(innerBacklogsAp.idmaterial) from backlogsap as innerBacklogsAp where innerBacklogsAp.idmaterial = src.idmaterial and IsDeleted = 0) as countReplacementVehiclerRequests from (select backlogsap.idmaterial as idmaterial, backlog.processingstate as processingstate, material.idsupplier as idsupplier, backlogsap.sellingorganizationname as sellingorganizationname, backlogsap.idpositiontype as idpositiontype, backlogsap.idordertype as idordertype, materialindistributioncenter.dispatchgroup as dispatchgroup, material.name as name, material.idmaterialgroup as materialgroup, materialgroup.idmaterialgroupcategory as materialgroupcategory, (processingstate = 0 or processingstate = 1) as newOrUpdated, ((cancellation.state is not null and cancellation.state = 0 ) or (reminderrequest.state is not null and (reminderrequest.state = 2 or reminderrequest.state = 0)) ) as isCritical from backlogsap join backlog using (idbacklogsap) left join cancellation using (idcancellation) left join reminderrequest on backlog.IdReminderRequest = reminderrequest.idreminder left join material using (idmaterial) left join materialindistributioncenter using (idmaterial, iddistributioncenter) left join materialgroup using (idmaterialgroup) where (idcancellation is null or cancellation.State not in (1)) and backlogsap.isdeleted = 0 and backlogsap.idordertype not in ('ZAP', 'ZAK', 'ZAKO', 'ZAKZ', 'ZAPM') and iddistributioncenter = 1469990 ) as src group by idmaterial order by classA desc, classB desc, classC, idmaterial desc 
  • 說明

     id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY <derived3> ALL 26960 Using temporary; Using filesort 3 DERIVED backlogsap index_merge PRIMARY,fk_BacklogSap_OrderType1_idx, fk_BacklogSap_MaterialInDistributionCenter1_idx, perform_backlogsap_isdeleted, fk_BacklogSap_DistributionCenter_idx perform_backlogsap_isdeleted,fk_BacklogSap_DistributionCenter_idx 1,4 35946 Using intersect(perform_backlogsap_isdeleted,fk_BacklogSap_DistributionCenter_idx); Using where 3 DERIVED backlog eq_ref idBacklogSAP_UNIQUE, fk_Backlog_BacklogSap1_idx, fk_Backlog_Cancellation1_idx idBacklogSAP_UNIQUE 4 ...backlogsap.IdBacklogSap 1 3 DERIVED cancellation eq_ref PRIMARY PRIMARY 4 ...backlog.IdCancellation 1 Using where 3 DERIVED reminderrequest eq_ref PRIMARY PRIMARY 4 ...backlog.IdReminderRequest 1 3 DERIVED material eq_ref PRIMARY PRIMARY 45 ...backlogsap.IdMaterial 1 3 DERIVED materialindistributioncenter eq_ref PRIMARY, unqiue_IdDistributionCenter_IdMaterial, fk_MaterialDistributionCenter_DistributionCenter1_idx, fk_MaterialDistributionCenter_Material1_idx PRIMARY 49 const,...backlogsap.IdMaterial 1 3 DERIVED materialgroup eq_ref PRIMARY PRIMARY 137 ....material.IdMaterialGroup 1 2 DEPENDENT SUBQUERY innerBacklogsAp ref perform_backlogsap_isdeleted, idx_backlogsap_IdMaterial idx_backlogsap_IdMaterial 45 func 8 Using where 

解決:創建組合索引(idmaterial,IsDeleted)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM