查询优化的问题

chenhaoying 2011-07-22 09:51:11
有个View_MemberClearingInfo视图由多个表级联起来:
SELECT dbo.MemberPointsClearing.MPCId, dbo.MemberPointsClearing.MemberCode, dbo.MemberPointsClearing.Mobile,
dbo.MemberPointsClearing.ClearingStandard, dbo.MemberPointsClearing.Amount, dbo.MemberPointsClearing.CMaker,
dbo.MemberPointsClearing.CDate, dbo.MemberPointsClearing.Checker, dbo.MemberPointsClearing.CheckDate, dbo.MemberPointsClearing.PointTotal,
dbo.MemberPointsClearing.ClearingSerialNumber, dbo.MemberPointsClearing.Remark, dbo.Member.MemberName, dbo.TicketsProject.TPName,
dbo.TicketsProject.TPType, dbo.MemberPointsClearingMx.SaleDate, dbo.TicketSaleMx.SaleMXSaleCode, dbo.MemberPointsClearingMx.Adult,
dbo.MemberPointsClearingMx.AdultPoints,
dbo.MemberPointsClearing.ClearingStandard * dbo.MemberPointsClearingMx.AdultPoints AS RebateTotalPrice
FROM dbo.MemberPointsClearing INNER JOIN
dbo.MemberPointsClearingMx ON dbo.MemberPointsClearing.MPCId = dbo.MemberPointsClearingMx.MPCId LEFT OUTER JOIN
dbo.Member ON dbo.MemberPointsClearing.MemberCode = dbo.Member.MemberCode INNER JOIN
dbo.TicketsProject ON dbo.MemberPointsClearingMx.TPCode = dbo.TicketsProject.TPCode INNER JOIN
dbo.TicketSaleMx ON dbo.MemberPointsClearingMx.SaleMxId = dbo.TicketSaleMx.id


在查询分析器中使用查询:SELECT TOP 20 * FROM [View_MemberClearingInfo]
WHERE CDate>='2011-06-01'
and CDate<='2011-07-20'
ORDER BY MCId DESC
需要6分钟才能出结果,而把CDate>='2011-06-01' 改为CDate>='2011-05-01' ,也就是把时间范围放大了,数据量更多了,查询的速度却变得才1秒就出结果了。我检查了CDate字段都没什么异常的(说明一点Cdate字段的值是getdate()默认填的),为什么出现这种情况?该如何解决啊。
我把日期改到其他范围也是0秒~5秒就出来了,也就是说这个时间起点有几个值让我执行很慢啊。
...全文
58 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenhaoying 2011-07-22
  • 打赏
  • 举报
回复
找到原因了,有个级联用的是左级联,若右边的没有值速度就很慢。我把视图中的dbo.Member.MemberName改为
(SELECT TOP (1) MemberName
FROM dbo.Member
WHERE (MemberCode = dbo.MemberClearing.MemberCode)) AS MemberName
速度马上恢复正常。
中国风 2011-07-22
  • 打赏
  • 举报
回复
語句便於閱讀,善用別名

查看執行計劃,看佔用成本最大的步驟
AcHerat 元老 2011-07-22
  • 打赏
  • 举报
回复
你看下时间点在这个日期的数据, CDate='2011-06-01'
DBCC 下表
重建下索引,统计信息看看。
chenhaoying 2011-07-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wxf163 的回复:]
那是第二次有缓存执行计划了
[/Quote]

应该不是这个原因,我测试了多种时间范围,有时间重叠和无关的,但是只要是起点在那个'2011-06-01' 就需要5分钟以上。
王向飞 2011-07-22
  • 打赏
  • 举报
回复
那是第二次有缓存执行计划了
dut 2011-07-22
  • 打赏
  • 举报
回复
这问题,先把MemberPointsClearing表的所有索引重新生成或者删除了重建试试

34,591

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧