小弟不才 有个sql
SET STATISTICS PROFILE ON
SET STATISTICS TIME ON
SET STATISTICS IO ON
SELECT Convert(bit,0) Selected,m1.MonthCode,m1.CusId,c.TaskId,m1.LastAmt,m1.DNAmt,m1.DNReAmt,
m1.CusPayAmt,m1.AdjustAmt,m1.CurAmt,CASE WHEN m1.DNAmt+m1.DNReAmt=0 THEN 1 ELSE ISNULL(1 - ROUND(isnull(md.FDAmt,0) / (m1.DNAmt + m1.DNReAmt), 2), 1) END CusDiscount,
1-(case when m1.DNAmt=0 then 0 else (isnull(md2.RAdjustAmt,0)+m1.DNReAmt*-1 /* //注释不要删+isnull(md3.RAdjustAmt,0)*/)/m1.DNAmt end) SalesProb,a.AccType,a.AccNum,a.InterestType,a.InterestNum
FROM dbo.MonthBalance m1
LEFT OUTER JOIN dbo.SalesPersonMonthDetail sm ON sm.MonthCode = m1.MonthCode and m1.CusId=sm.CusId
left outer join Customer c on c.CusId=m1.CusId
left OUTER join (select MonthCode,CusId,isnull(sum(DNAmt)*-1.0,0) FDAmt from MonthDetail2 where PayName='优惠' and Category=3 group by MonthCode,CusId) md on md.MonthCode=m1.MonthCode and md.CusId=m1.CusId
left outer join (select MonthCode,CusId,isnull(sum(DNAmt)*-1.0,0) RAdjustAmt from MonthDetail2 where Category=3 group by MonthCode,CusId) md2 on md2.MonthCode=m1.MonthCode and md2.CusId=m1.CusId
-- left outer join (select MonthCode,CusId,isnull(sum(DNAmt),0) RAdjustAmt from MonthDetail2 where Category=4 and DNAmt>0 group by MonthCode,CusId) md3 on md3.MonthCode=m1.MonthCode and md3.CusId=m1.CusId
left outer join AccountSet a on a.CusId=m1.CusId
WHERE isnull(sm.MonthCode,'0')='0' and m1.MonthCode like '2021-03%' order by CusId
SET STATISTICS TIME OFF
SET STATISTICS IO OFF
SET STATISTICS PROFILE OFF
where条件中的monthcode like 分别为 %x%和 x% 测试
SQL Server 执行时间:
CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。
(692 行受影响)
表 'MonthDetail2'。扫描计数 699,逻辑读取 16102548 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'Customer'。扫描计数 0,逻辑读取 1384 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'SalesPersonMonthDetail'。扫描计数 0,逻辑读取 1384 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'MonthBalance'。扫描计数 7,逻辑读取 687 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'AccountSet'。扫描计数 0,逻辑读取 1384 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'Worktable'。扫描计数 0,逻辑读取 0 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
(28 行受影响)
SQL Server 执行时间:
CPU 时间 = 133206 毫秒,占用时间 = 25037 毫秒。
SQL Server 执行时间:
CPU 时间 = 0 毫秒,占用时间 = 0 毫秒。
(692 行受影响)
表 'MonthDetail2'。扫描计数 14,逻辑读取 46472 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'Customer'。扫描计数 0,逻辑读取 1384 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'SalesPersonMonthDetail'。扫描计数 0,逻辑读取 1384 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'MonthBalance'。扫描计数 7,逻辑读取 687 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'AccountSet'。扫描计数 0,逻辑读取 1384 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'Worktable'。扫描计数 0,逻辑读取 0 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
(30 行受影响)
SQL Server 执行时间:
CPU 时间 = 436 毫秒,占用时间 = 83 毫秒。
为何影响的是monthdetail2表 这个表确实是没有索引 我也未建索引测试结果 恳请各位分析一波
网上能搜索到的结论都是 走不走MonthBalance的索引 我属实懵逼了