SQL Server执行SQL语句时内存占用特点
2007-11-11 11:36:09 来源:WEB开发网- ·SQL高手篇:精妙SQL语句介绍
·一个sql语句,包含有几乎所有标准查询
·经验分享交流:常用SQL语句技法
·SQL语句和存储过程 查询语句的流程控
·实战SQL语句收集(不断更新中--)
·SQL语句性能优化--LECCO SQL Expert
·查询同一表内多字段同时重复记录的SQL
·数据库人员手边系列:SQL语句导入导出
·得出SQL语句的执行时间的方法
·使用一条SQL语句删除表中重复记录
1.1 执行全表选取或者低选择性选取
Select * From P_User
从SQL执行计划可以看到,由于此时表中没有任何索引,因此将产生Table Scan。而IO统计结果如下:
(1000 row(s) affected)
表'P_User'。扫描计数1,逻辑读取4 次,物理读取4 次,预读0 次,lob 逻辑读取0 次,lob 物理读取0 次,lob 预读0 次。
我们看一下数据库内存中的情况。
首先查询到我们所操作database的database_id:
以下是引用片段: Select database_id From sys.databases Where name='TestGDB' |
然后使用该database_id从表中查看内存情况:
以下是引用片段: SELECT * FROM sys.dm_os_buffer_descriptors bd WHERE database_id=5 order by allocation_unit_id,page_id |
得到结果如下:
(WINDOWS平台上强大的数据库平台)执行SQL语句时内存占用特点(图一)" width="500" height="90" />
得到的结果中可以看到,除了必要的管理页(一个PFS_Page和一个IAM_Page)外,内存中总共出现了4个Data_Page页。这和刚才IO统计中看到的结果:逻辑读为4,物理读为4相同。由于是全表读取,表明P_User表全部数据所占用的数据页数也正是4,将这4个数据页的row_count数加起来也可以验证其总数据行=1000。
在上例中,如果不清空数据缓冲区,再执行一遍SQL,可以看到内存毫无变化,而逻辑读也不变,只是物理读变为0,因为已经不需要再从磁盘读入数据。
1.2 执行高选择性选取
另外,在没有索引的情况下,如果将上例修改为:
以下是引用片段: Select Top 1 * From P_Order 或者Select * From P_Order Where MobileNo=28502 |
可以看到,系统同样要读取全部的数据页到内存。
如果使用Select Top 1 * From P_Order Where MobileNo=28502这样的选取方式,有可能会出现只读取部分数据页到内存的情况。但由于在没有索引情况下,数据实际上是无序存放在堆上,所以结果很不稳定,也有可能发生读取所有的数据页到内存。
测试2:建立聚集索引情况下,执行SQL语句
- ››sql server自动生成批量执行SQL脚本的批处理
- ››sql server 2008亿万数据性能优化
- ››SQL Server 2008清空数据库日志方法
- ››sqlserver安装和简单的使用
- ››SQL Sever 2008 R2 数据库管理
- ››SQL SERVER无法安装成功,sqlstp.log文件提示[未发...
- ››Sql Server中通过父记录查找出所有关联的子记录
- ››SqlServer触发器、存储过程和函数
- ››SQL Server 中的事务(含义,属性,管理)
- ››Sqlite数据库插入和读取图片数据
- ››Sql server 2005拒绝了对对象 'xx表' (数...
- ››Sql server 2005拒绝了对对象 'xx表' (数...
更多精彩
赞助商链接