太不可思议了:内存表竟然比永久表慢12倍以上???SQL Server怎样优化的?

jjdelphi jjdelphi 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
看看下面两个SQL语句,注意看最后的where条件
语句A:
select a.StudNo,b.TrainPlanNo,a.AYearTermNo,b.CurSortNo,b.CurPrpNo,Credit
from StudScore a,TPlan_SpectTrainPlanCur b,ClassStudTab c,Class d,TPlan_CurBasicInfo e
where a.StudNo=c.StudNo and a.CurNo=b.CurNo and b.TrainPlanNo=d.TrainPlanNo
and b.SpectDireNo=c.SpectDireNo and c.ClassNo=d.ClassNo and a.CurNo=e.CurNo
and a.ScoringModeNo=1 and floor(a.ExamScore)>=60 and a.AYearTermNo= 20001
and b.CurSortNO=3 and b.CurPrpNo=1 --注意这里,最后的两个条件来自同一个表
语句B:
drop table aaa --使用表aaa暂存
select *
into aaa
from
(select a.StudNo,b.TrainPlanNo,a.AYearTermNo,b.CurSortNo,b.CurPrpNo,Credit
from StudScore a,TPlan_SpectTrainPlanCur b,ClassStudTab c,Class d,TPlan_CurBasicInfo e
where a.StudNo=c.StudNo and a.CurNo=b.CurNo and b.TrainPlanNo=d.TrainPlanNo
and b.SpectDireNo=c.SpectDireNo and c.ClassNo=d.ClassNo and a.CurNo=e.CurNo
and a.ScoringModeNo=1 and floor(a.ExamScore)>=60 and a.AYearTermNo= 20001
and b.CurSortNO=3 ) z --先不使用b.CurPrp=1这个条件
--下面再从表aaa中使用b.CurPrp=1这个条件
select * from aaa
where CurPrpNo=1

语句A执行要12秒,语句B不到1秒!测试数据不是很多,最后检索数据有1035条。
究竟是为什么?
...全文

相关推荐

SQL Server多表查询优化方案集锦

本文我们主要对SQL Server多表查询的优化方案进行了总结,并给出了实际的例子进行性能与效率的对比,需要的朋友可以参考下

weixin_38590784

优化SQL Server数据库服务器内存配置

在大多数情况下,为了充分发挥Windows NT 4.0系统效能,内存的作用比起处理器的处理能力更具有影响力,特别是在客户/服务器模式环境下更是如此,因为通常在这种环境下并不十分强调处理器的能力,相反却十分注重是否采用足够的内存来满足各个客户的应用需要。本文主要介绍利用如何优化SQLServer数据库服务器的内存配置提出一些认识和看法。

weixin_38633897

SQL Server数据库占用过多内存的解决方法

此文档中详细记载了,SQL Server数据库占用过多内存的解决方法,希望可以帮到下载的朋友们!

li_peng_fei

SQL Server删除表及删除表中数据的方法

本文介绍SQL Server中如何删除表,如何删除表中的数据。在删除表数据时有delete和truncate两种方法,delete和truncate有什么区别呢? SQL Server,我们现在基本上使用的最古老的版本应该是SQL Server 2000吧,应该没有更早的版本了吧?!从SQL Server 2000开始,到SQL Server 2005,2008,2012等,T-SQL的处理能力越来越强。今天我们就来说说如何使用T-SQL脚本来删除表,以及删除表中的数据。 删除表和删除表数据这是两回事!删除表表示不管表中有没有数据,将该数据库表彻底抹去,不留下任何东西。而删除表数据,只是删除表

weixin_38617851

SQL Server的内存为何不断增加

当SQL Server数据库引擎运行时,其默认内存管理行为并不是获取特定的内存量,而是在不产生多余换页I/O的情况下获取尽可能多的内存。为此,数据库引擎获取尽可能多的可用内存,同时保留足够的可用内存以防操作系统交换内存。SQL Server实例在启动时通常获取8MB到12MB的内存以完成初始化过程。当实例完成初始化后,就不会再获取更多的内存,直到用户连接到该实例并开始产生工作负荷。该实例根据需要不停地获取内存以支持工作负荷。随着更多的用户连接并运行查询,SQL Server将获取支持需求所需的额外内存。

weixin_38712908
评论 18
收藏 已收藏
分享
返回顶部
jjdelphi
疑难问题 22,298 成员 121,727 内容