SQL SERVER Performance查询使用索引就是快 ?

发布日期:2012-08-13 11:12:02

资料库世界中,改善查询效能最快的方法,

我想大概就属针对查询特性建立相对应索引类型了,

但什麽时机使用索引效能才能最大化呢?那莫过于大海捞针时,

在说的更明白一点,索引用于庞大资料表中搜寻极少数资料时,

下面我模拟一个前几天碰到的问题,我想大家应该会暸解。

 

 

--creat table
create table mytest
(
c1 int identity(1,1) ,
c2 varchar(10),
c3 date
)

--insert 10000 rows
set NOCOUNT on
DECLARE @step int
DECLARE @mysql nvarchar(4000)
set @step=1;
WHILE(@step <=10000)
begin
set @mysql='insert into mytest values(''rico'',getdate())'
exec sp_executesql @mysql 
set @step=@step+1  
end

--create nonclustered index
CREATE index idx_1 on mytest(c2)
include(c3)

--query 
SELECT c2,c3
from dbo.mytest 
where c2='rico'


 

I/O 和 Time统计www.it165.net 。
 


 

Query Cost:0.042 。

 

你可以看到我针对上面查询语法建立涵盖索引,

而SQL Server 查询最佳化程式也果真使用索引搜寻作业,

一般人大概看到索引搜寻作业,几乎认定这是查询最佳路径,

我不能说他完全错,但也不是完全对,

因为我曾说过,索引效能最大化莫过于大海捞针时,

资料库术语就是索引键值选择性要高,

回头来看资料表 c2 资料内容几乎一模一样(选择性太低),

所以根本就不需要为了该查询建立非丛集索引,

因为建立无效索引不仅浪费硬碟空间(也浪费记忆体),

也影响delete、insert、update…等效能,

所以针对索引键值选择性过低的查询语法,不如使用Full Table Scan来的好,

下面我将删除该索引并証明我的假设是对的。

 


 

I/O和time统计 。
 


 

Query Cost:0.037 。

你可以看到我删除非丛集索引后,I/O减少为32、查询成本减少为0.037、经过时间减少为117 ms。

后来这位朋友问我,是否可以推荐索引设计相关书本,

我说书本是其次,IT这行只有多思考、多尝试、多测试唯有自己亲身走过才是真的。

Tag标签: Performance  
  • 专题推荐

About IT165 - 广告服务 - 隐私声明 - 版权申明 - 免责条款 - 网站地图 - 网友投稿 - 联系方式
本站内容来自于互联网,仅供用于网络技术学习,学习中请遵循相关法律法规