2017-10-05 3 views
0

J'ai une requête comme ceciRequête sans clause where - optimisation des performances - mysql

L'exécution prend 40 minutes. Je ne peux pas ajouter d'autres clauses where j'ai besoin de toutes les données

La configuration des tables est la suivante et ci-dessous est un instantané du plan d'explication.

Je sais que c'est une requête déraisonnable car il accède à toutes les données. Mais, est-il possible d'améliorer les horaires?

select 
    pl.CompanyId, 
    pl.FarmerCropId, 
    ai.ActivityId, 
    ai.ActivityName, 
    ai.ActivityPlanId, 
    ai.ActivityPlanName, 
    ai.ActivityScheduleId, 
    ai.DAS, 
    (case when fca.CompletionDate = '1900-01-01' then null else fca.CompletionDate end)CompletionDate, 
    fca.IsClosed, 
    fca.LastModifiedDate, 
    ai.AttributeDataTypeId, 
    ai.AttributeId, 
    ai.AttributeName, 
    fcaa.FarmerCropActivityAttributeId, 
    fcaa.Reading, 
    ai.DataTypeId, 
    ai.DataTypeName, 
    ai.SequenaceNo, 
    fca.isactive, 
    pl.partitionflag, 
    fca.ExpectedStartDate, 
    fca.ExpectedClosureDate, 
    ai.ActivityMasterIsActive, 
    ai.ActivityPlanIsActive, 
    ai.ActivityScheduleIsActive, 
    ai.AttributeDataTypeIsActive, 
    ai.AttributeMasterIsActive, 
    case when isclosed = '1' then 'Closed On Time' 
       when isclosed = '2' then 'In Progress' 
       when isclosed = '3' then 'Pending' 
       when isclosed ='5' then 'Late Closed' 
       when isclosed ='4' then 'Not Started' 
       end as ClosureStatus , 
       fca.FarmerCropActivityID 
from 
activityinformation ai 
join FarmerCropActivity fca 
    on ai.activityscheduleid = fca.activityscheduleid 
    and fca.isactive = 1 
left join FarmerCropActivityAttributes fcaa 
    on fcaa.farmercropactivityid = fca.farmercropactivityid 
    and fcaa.AttributeDataTypeID = ai.AttributeDataTypeID 
join plot pl on 
pl.farmercropid = fca.farmercropid 
where pl.partitionflag = 1; 

activityinformation

lignes 1.Total - 137653

2.Indexes -

idx_activityinformation_combinedids(ActivityMasterIsActive, ActivityPlanIsActive , ActivityScheduleIsActive,AttributeDataTypeIsActive 
,AttributeMasterIsActive) 

3.Columns -

source 
      ActivityId 
      ActivityName 
      ActivityPlanId 
      ActivityPlanName 
      CropTypeId 
      ActivityScheduleId 
      ActivityintervalDays 
      AttributeDataTypeId 
      SequenaceNo 
      AttributeId 
      AttributeName 
      DAS 
      DataTypeID 
      DataTypeName 
      talendate 
      companyid 
      ActivityMasterIsActive 
      ActivityPlanIsActive 
      ActivityScheduleIsActive 
      AttributeDataTypeIsActive 
      AttributeMasterIsActive 
      Min 
      Max 

farmercropactivity

lignes 1.Total - 2721502

Index -

idx_fca_activityscheduleid(activityscheduleid), 

idx_fca_activityid(ActivityID), 

idx_fca_farmercropid(FarmerCropId), 

idx_fca_composite(ActivityScheduleID , IsActive , ActivityID , FarmerCropId , FarmerCropActivityID), 

idx_fca_composite1(ActivityScheduleID , IsActive , FarmerCropId , FarmerCropActivityID , ActivityID , CompletionDate , IsClosed , 
LastModifiedDate , ExpectedStartDate , ExpectedClosureDate) 

3.Columns -

FarmerCropActivityID 
      FarmerCropId 
      ActivityScheduleID 
      CompletionDate 
      ExpectedStartDate 
      ExpectedClosureDate 
      Suggestions 
      Comments 
      IsClosed 
      IsActive 
      LastModifiedDate 
      LastModifiedBy 
      ActivityID 
      ActivityReading 
      IsMandatory 
      ActivityCategoryID 
      ClientId 

farmercropactivityattributes

lignes 1.Total - 4993953

  1. Index -

    idx_fcaa_farmercropactivityid (FarmerCropActivityID), idx_fcaa_AttributeDataTypeID (AttributeDataTypeID)

  2. Columns -

    FarmerCropActivityAttributeID FarmerCropActivityID AttributeDataTypeID Lecture ID client

plot

lignes 1.Total - où partitionflag = 1 --- 328838

2.indexes -

idx_composite2(companyid , partitionflag , FarmerCropId) 

3.Colonnes -

source 
      companyid 
      Company 
      FarmerId 
      FarmerCode 
      FarmerName 
      LandId 
      PlotName 
      Latitude 
      Longitude 
      FarmerCropId 
      Village 
      DistrictId 
      CropId 
      crop 
      VarietyId 
      Variety 
      SowingDate 
      SowingWeek 
      SowingWeekRange 
      SowingMonth 
      SowingMonthName 
      SowingYear 
      DeclaredArea 
      AuditedArea 
      SowingArea 
      IsAudited 
      IsGeoTagged 
      ExpectedHarvestPerAcre 
      FirstExpectedHarvestDate 
      FirstActualHarvestDate 
      HarvestArrivalStatus 
      PlannedQuantity 
      ExpectedQuantity 
      CurrentQuantity 
      HarvestQuantity 
      RegistrationDate 
      RegistrationWeek 
      RegistrationWeekRange 
      RegistrationMonth 
      RegistrationMonthName 
      RegistrationYear 
      ActivityPlanId 
      ActivityPlanName 
      HarvestPlanId 
      HarvestPlanName 
      LastModifiedDate 
      Address 
      Territory 
      Taluka 
      ReestimateDate 
      NewHarvestDate 
      NewHarvestQuantity 
      ReestimateReasonCode 
      ReestimateReason 
      Comments 
      FarmerCropHarvestreestimateId 
      IsReestimated 
      ReestimateDaysShift 
      CurrentQuantityWithoutReestimate 
      HarvestUnitId 
      harvestunit 
      ExtendedHarvestUnitId 
      ExtendedHarvestUnit 
      ConversionFactor 
      MobileNumber 
      Coordinates 
      PreferredSKUTypeId 
      PreferredSKUName 
      Capacity 
      Soiltypeid 
      soildesc 
      Irrigationtypeid 
      irrigationtypedesc 
      lastmodifiedon 
      partitionflag 
      areaunitid 
      areaunitname 
      archivedate 
      talendate 
      geoid 
      idtoroot 
      nametoroot 
      RevisedFirstExpectedHarvestDate 
      HarvestStatusId 
      HarvestStatus 

enter image description here

Merci Rathi

+1

Vous pouvez envoyer moins de données. C'est à peu près ça. Vous envoyez ~ 136k lignes. Cela prend du temps pour l'envoyer, et de l'autre côté pour l'accepter/l'analyser. Ce que vous demandez est d'optimiser la partie où vous * trouvez * ces 136k - mais ce n'est que 1/3 de vos problèmes de performance et comme vous pouvez le voir - la partie de trouver des lignes à rejoindre est assez rapide. – Mjh

+0

Quelle est votre requête? –

+0

Toutes mes excuses !! avait manqué la requête, l'ai inclus maintenant dans la question principale –

Répondre

0

Nécessaires:

fcaa: INDEX(FarmerCropActivityID, AttributeDataTypeID, Reading) 

(Reading doit être la dernière, l'ordre des deux autres est facultative.) Cela vaut mieux que les deux index de colonne unique que vous avez, et il est "couvrant".

plot: INDEX(partitionflag , FarmerCropId, companyid) 

companyid doit être dernière, pas le premier. Encore une fois, c'est mieux que ce que vous avez, et c'est «couvrir». Ajoutez cet index. Et supprimez l'existant - mais seulement si cela n'est pas nécessaire pour une autre requête.