WEB开发网
开发学院数据库MSSQL Server SQL Server执行SQL语句时内存占用特点 阅读

SQL Server执行SQL语句时内存占用特点

 2007-11-11 11:36:09 来源:WEB开发网   
核心提示: ·SQL高手篇:精妙SQL语句介绍·一个sql语句,包含有几乎所有标准查询·经验分享交流:常用SQL语句技法·SQL语句和存储过程 查询语句的流程控·实战SQL语句收集(不断更新中--)·SQL语句性能优化--LECCO SQL Ex
    ·SQL高手篇:精妙SQL语句介绍
    ·一个sql语句,包含有几乎所有标准查询
    ·经验分享交流:常用SQL语句技法
    ·SQL语句和存储过程 查询语句的流程控
    ·实战SQL语句收集(不断更新中--)
    ·SQL语句性能优化--LECCO SQL Expert
    ·查询同一表内多字段同时重复记录的SQL
    ·数据库人员手边系列:SQL语句导入导出
    ·得出SQL语句的执行时间的方法
    ·使用一条SQL语句删除表中重复记录
测试1:在没有索引的表上执行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

得到结果如下:

sql server<font class=reblank  style=(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语句

上一页  1 2 3 4 5 6  下一页

Tags:SQL Server 执行

编辑录入:coldstar [复制链接] [打 印]
赞助商链接