• 影响SQL语句的查询速率的影响因素(索引、查询字段之间的是是非非)


      继续SQL查询语句速率的问题。上一篇说表中索引字段的顺序影响查询结果的问题,相同的索引字段顺序下查询语句中是否包含全部的索引字段,也对SQL语句的查询速率产生影响

    包含索引的所有字段(SQL):

    select count(1) as totalcount from (SELECT * FROM (
     select distinct  sa.ProjectTypeCode, active.Id,active.ContractorId,active.CompanyName,active.CooperationTypes ,active.PeriodID,'' PeriodName ,active.Annex,active.IsMark ,active.MainContacts, active.AddressAndTel, active.LastModificationTime, active.ContractorEmployeeId,active.SprPlanDetailId,active.SPRCompleteDetailId , active.SprReportId,behaviorHappenDate,sa.IsDeleted from serviceActivities sa with (nolock) 
    join ReportBusinessCooperation active with (nolock) on sa.ServiceActivitieId = active.Id 
     and sa.IsDeleted=0 and active.IsDeleted=0  
     and sa.ProjectTypeCode=26   
     and (1=1)
     AND sa.BehaviorHappenDate <= '2021/3/31 0:00:00' and sa.BehaviorEndDate >='2021/1/1 0:00:00'
     AND sa.ContractorId = 'f7368068-51db-c04e-d81d-39e7ccb79202'  
     AND  sa.SprReportId = '-1' and sa.SprPlanDetailId ='-1' and   sa.SPRCompleteDetailId ='-1'  and sa.ContractorId='f7368068-51db-c04e-d81d-39e7ccb79202'  
     join  (select * from  ServiceActivitiesProductRelation  aps  where  1=1  
     and exists ( select uu.id from [ServiceActivitiesProductRelation] uu where 
     '66bcd5c4-fb4f-3eb3-6df1-39f58512a4bf,10f2f9e9-94b4-c6bf-6856-39f41ee11b5c,-1' like '%'+uu.ProductId+'%'  
     and  '1decb0bd-347b-8715-736b-39f58515f6c7,26882107-fb33-04bf-61a6-39f422c2bf13,-1' like '%'+uu.ProductFormatId+'%'  
     and uu.id=aps.id )
     )
     rela on sa.id= rela.ParentId  and rela.IsDeleted=0 
      join (  select * from  PersonalAgreementShips  aps  where  1=1     
     and exists(  select  id  from(  select t.id, b.prov from(  select cspemp.id, convert(xml, '<root><v>' + replace(cspemp.Province, ',', '</v><v>') + '</v></root>') as prov  from PersonalAgreementShips cspemp with(nolock)     
      where   cspemp.ContractorID = 'f7368068-51db-c04e-d81d-39e7ccb79202'   and cspemp.CSPId='0b94ac99-d9fd-2dff-8b2a-39f22f015e46'   
     )t 
       outer apply  (select C.v.value('.', 'nvarchar(36)')prov from t.prov.nodes('/root/v')C(v)) b )conempprov   
      join (  select b.prov from( select convert(xml, '<root><v>' + replace('100000',',', '</v><v>') + '</v></root>') as prov  ) t outer apply ( select C.v.value('.','nvarchar(36)') prov from t.prov.nodes('/root/v')C(v))b  ) planprov on conempprov.prov = planprov.prov OR conempprov.prov = '100000' OR planprov.prov = '100000' where conempprov.Id = aps.Id ) 
       ) perag on sa.ContractorEmployeeId=perag.ContractorEmployeeId  and perag.IsDeleted=0  
    
    ) availabledata WHERE 1=1
     AND availabledata.ContractorId='f7368068-51db-c04e-d81d-39e7ccb79202'
    
    ) tab_num

    以下是三种情况SQL语句的执行结果:

    -------------------------------将索引字段添加到查询语句中的 执行结果----------------------------------
    SQL Server 分析和编译时间:
    CPU 时间 = 7516 毫秒,占用时间 = 7912 毫秒。

    (1 行受影响)
    表 'ServiceActivitiesProductRelation'。扫描计数 3,逻辑读取 44720 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
    表 'Worktable'。扫描计数 0,逻辑读取 0 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
    表 'Worktable'。扫描计数 0,逻辑读取 0 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
    表 'ServiceActivities'。扫描计数 0,逻辑读取 45907 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
    表 'PersonalAgreementShips'。扫描计数 1,逻辑读取 840 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
    表 'ReportBusinessCooperation'。扫描计数 0,逻辑读取 14 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

    SQL Server 执行时间:
    CPU 时间 = 1312 毫秒,占用时间 = 678 毫秒。
    SQL Server 分析和编译时间:
    CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。
    ---------------------------调整索引顺序的执行结果----------------------------------
    SQL Server 分析和编译时间:
    CPU 时间 = 7281 毫秒,占用时间 = 7439 毫秒。

    表 'ServiceActivitiesProductRelation'。扫描计数 2,逻辑读取 7281 次,物理读取 0 次,预读 11 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
    表 'Worktable'。扫描计数 0,逻辑读取 0 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
    表 'Worktable'。扫描计数 6,逻辑读取 306762 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
    表 'ServiceActivities'。扫描计数 158,逻辑读取 4614 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
    表 'PersonalAgreementShips'。扫描计数 5,逻辑读取 260 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
    表 'ReportBusinessCooperation'。扫描计数 3,逻辑读取 184 次,物理读取 0 次,预读 31 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

    SQL Server 执行时间:
    CPU 时间 = 1297 毫秒,占用时间 = 741 毫秒。
    SQL Server 分析和编译时间:
    CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。
    ======================未调整索引顺序及SQL语句的执行结果========================
    SQL Server 分析和编译时间:
    CPU 时间 = 7781 毫秒,占用时间 = 8326 毫秒。

    (1 行受影响)
    表 'ServiceActivitiesProductRelation'。扫描计数 158,逻辑读取 6912836 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
    表 'Worktable'。扫描计数 0,逻辑读取 0 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
    表 'Worktable'。扫描计数 2,逻辑读取 1450 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
    表 'ServiceActivities'。扫描计数 0,逻辑读取 7139349 次,物理读取 134 次,预读 1430 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
    表 'PersonalAgreementShips'。扫描计数 9,逻辑读取 208 次,物理读取 0 次,预读 7 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
    表 'ReportBusinessCooperation'。扫描计数 3,逻辑读取 184 次,物理读取 0 次,预读 24 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。

    SQL Server 执行时间:
    CPU 时间 = 162860 毫秒,占用时间 = 85239 毫秒。
    SQL Server 执行时间:
    CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。

    由以上三种执行结果来看;包含索引的所有字段的查询语句对各个表的扫描次数最少,其次是调整索引字段的顺序,最后是即未对字段顺序做出合理调整,查询语句中又不包含所有的索引字段的情况扫描次数最多。

    主观臆断(仅代表自己的观点):SQL语句的select 的查询集合极可能会继承查询主表的索引情况或是select的查询集合收查询主表的索引影响(可能与数据库中索引的存储结构有关)。

  • 相关阅读:
    两数相加[链表加法] LeetCode.2
    无重复字符的最长子串[双指针+哈希表] LeetCode.3
    Rikka with Game[技巧]----2019 杭电多校第九场:1005
    度度熊与排列[搜索+剪枝]----2019 年百度之星·程序设计大赛
    度度熊与数字[公因数]----2019 年百度之星·程序设计大赛
    最大层内元素和----leetcode周赛150_1002
    拼写单词[哈希表]----leetcode周赛150_1001
    Seq[找规律]----2019 年百度之星·程序设计大赛
    实验三
    实验二
  • 原文地址:https://www.cnblogs.com/ITyueguangyang/p/14505018.html
Copyright © 2020-2023  润新知