索引的使用说明
来源:互联网 发布:淘宝sha骗局 编辑:程序博客网 时间:2024/05/21 20:21
索引的使用说明
题外话:
昨天比较郁闷,维护一客户的数据库系统时候,发现系统处理数据就出现假死。
开始因为是软件问题,拷得乱忙一下午还没有拷定,后来一直弄到晚上7点,突然想起索引问题。
后来就使用了一命令:
即可实现。比较郁闷和晕,自己犯这样的错误。
这错误,正好是我想写这帖的原因,希望能为大家解决一些实际问题吧。
正题:
为什么要建立合适的索引,重要的目的就是提高查询效率。
这里简单说一下索引的两种类型:
来的例子说明最能体现建立索引的好处。
在我的测试中,DTest,TTest表有500多万条记录,可以满足测试要求。
操作如图:
1、设置表TTest的字段ID为主键。
2、对表TTest中的列TName建立一个非聚集索引。
3、测试查询语句的效率。
在查询分析器中输入:
按键盘Ctrl+L,显示预计的执行计划,可以查看执行效率。
预计的成本是31.8.
再在查询分析器中输入:
按键盘Ctrl+L,显示预计的执行计划,可以查看执行效率。
预计的成本是28.5 .
从这图可以看出,使用索引后,查询效率差不多提高了10的百分点。
下面我们再看实际查询的结果用时:
没有索引时候,用时:26秒。
对列Tname加索引,用时:0秒。
呵呵,明显看出效率的提高。
这里写几点注意:
1、将更新尽可能多的行的查询写入单个语句内,而不要使用多个查询更新相同的行。仅使用一个语句,就可以利用优化的索引维护。
2、对聚集索引使用整型键。另外,在唯一列、非空列或 IDENTITY 列上创建聚集索引可以获得性能收益
3、在查询经常用到的所有列上创建非聚集索引。这可以最大程度地利用隐蔽查询
4、重建索引可以重新组织索引数据(对于聚集索引还包括表数据)的存储,清除碎片。如我开始提到的使用
来重构索引。
在实际的应用中,会发现很多问题,得具体问题具体分析,这里只是简单一个例子说明使用索引的好处。
(完)
昨天比较郁闷,维护一客户的数据库系统时候,发现系统处理数据就出现假死。
开始因为是软件问题,拷得乱忙一下午还没有拷定,后来一直弄到晚上7点,突然想起索引问题。
后来就使用了一命令:
dbcc dbreindex('TableName','',80)
即可实现。比较郁闷和晕,自己犯这样的错误。
这错误,正好是我想写这帖的原因,希望能为大家解决一些实际问题吧。
正题:
为什么要建立合适的索引,重要的目的就是提高查询效率。
这里简单说一下索引的两种类型:
来的例子说明最能体现建立索引的好处。
--测试表DTest (无索引)
SELECT IDENTITY(int,1,1) AS [id],B.[id] AS TKey,B.[Name] AS [TName] INTO DTest
FROM Master..syscolumns AS A ,Master..sysobjects AS B
--测试表TTest (建立索引)
SELECT IDENTITY(int,1,1) AS [id],B.[id] AS TKey,B.[Name] AS [TName] INTO TTest
FROM Master..syscolumns AS A ,Master..sysobjects AS B
SELECT IDENTITY(int,1,1) AS [id],B.[id] AS TKey,B.[Name] AS [TName] INTO DTest
FROM Master..syscolumns AS A ,Master..sysobjects AS B
--测试表TTest (建立索引)
SELECT IDENTITY(int,1,1) AS [id],B.[id] AS TKey,B.[Name] AS [TName] INTO TTest
FROM Master..syscolumns AS A ,Master..sysobjects AS B
在我的测试中,DTest,TTest表有500多万条记录,可以满足测试要求。
操作如图:
1、设置表TTest的字段ID为主键。
2、对表TTest中的列TName建立一个非聚集索引。
3、测试查询语句的效率。
在查询分析器中输入:
SELECT * FROM DTest WHERE TName='sp_ActiveDirectory_Obj'
按键盘Ctrl+L,显示预计的执行计划,可以查看执行效率。
预计的成本是31.8.
再在查询分析器中输入:
SELECT * FROM TTest WHERE TName='sp_ActiveDirectory_Obj'
按键盘Ctrl+L,显示预计的执行计划,可以查看执行效率。
预计的成本是28.5 .
从这图可以看出,使用索引后,查询效率差不多提高了10的百分点。
下面我们再看实际查询的结果用时:
没有索引时候,用时:26秒。
对列Tname加索引,用时:0秒。
呵呵,明显看出效率的提高。
这里写几点注意:
1、将更新尽可能多的行的查询写入单个语句内,而不要使用多个查询更新相同的行。仅使用一个语句,就可以利用优化的索引维护。
2、对聚集索引使用整型键。另外,在唯一列、非空列或 IDENTITY 列上创建聚集索引可以获得性能收益
3、在查询经常用到的所有列上创建非聚集索引。这可以最大程度地利用隐蔽查询
4、重建索引可以重新组织索引数据(对于聚集索引还包括表数据)的存储,清除碎片。如我开始提到的使用
dbcc dbreindex('TableName','',80)
来重构索引。
在实际的应用中,会发现很多问题,得具体问题具体分析,这里只是简单一个例子说明使用索引的好处。
(完)
- 索引的使用说明
- 索引的使用说明
- 索引的使用说明
- sql索引类型和使用说明
- sql索引类型和使用说明
- ”##”的使用说明
- jakarta-taglibs的使用说明
- NDoc的使用说明!
- 日常工具的使用说明
- toLua:简洁的使用说明
- Typedef的使用说明
- Emacs的info使用说明
- NuSOAP的使用说明
- Hash_table 的简单使用说明
- RefactorAsp 的使用说明
- NUnit的使用说明
- HIbernate的参数使用说明
- IEWebBrowser组件的使用说明
- SOA
- ASP.NET在MOSS中与Webpart数据库的访问参数设置。
- 高手 全面认识Svchost.exe进程
- Asp.net源码程序分析所感——印度,一个不可轻视的近邻!
- FFmpeg 参数说明
- 索引的使用说明
- 转义字符跟变量的一些事
- 实战DeviceIoControl:通过API访问设备驱动程序
- FFmpeg编译大全
- 当鼠标N秒内无操作时执行一个操作(如:执行屏保、返回首页等)
- VC文件扩展名解读大全(转)
- 关于FTP的WINDOWS API函数
- 如何在一台机器上运行两个tomcat
- 人生哲理