首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

-小弟我的一些笔记(三)-

2012-02-01 
------我的一些笔记(三)--------SQL code--结合sys.indexes和sys.index_columns,sys.objects,sys.columns

------我的一些笔记(三)--------

SQL code
--结合sys.indexes和sys.index_columns,sys.objects,sys.columns查询索引所属的表或视图的信息select  o.name as 表名,  i.name as 索引名,  c.name as 列名,  i.type_desc as 类型描述,  is_primary_key as 主键约束,  is_unique_constraint as 唯一约束,  is_disabled as 禁用from  sys.objects o inner join  sys.indexes ion  i.object_id=o.object_idinner join   sys.index_columns icon  ic.index_id=i.index_id and ic.object_id=i.object_idinner join  sys.columns con  ic.column_id=c.column_id and ic.object_id=c.object_idgo--查询索引的键和列信息select   o.name as 表名,  i.name as 索引名,  c.name as 字段编号,from  sysindexes i inner join sysobjects o on  i.id=o.idinner join  sysindexkeys k on  o.id=k.id and i.indid=k.indidinner join  syscolumns c on  c.id=i.id and k.colid=c.colidwhere  o.name='表名'--查询数据库db中表tb的所有索引的随片情况use dbgoselect   a.index_id,---索引编号  b.name,---索引名称  avg_fragmentation_in_percent---索引的逻辑碎片from  sys.dm_db_indx_physical_stats(db_id(),object_id(N'create.consume'),null,null,null) as ajoin  sys.indexes as bon  a.object_id=b.object_id and  a.index_id=b.index_idgo---解释下sys.dm_db_indx_physical_stats的参数datebase_id: 数据库编号,可以使用db_id()函数获取指定数据库名对应的编号。object_id: 该索引所属表或试图的编号index_id: 该索引的编号partition_number:对象中分区的编号mode:模式名称,用于指定获取统计信息的扫描级别。有关sys.dm_db_indx_physical_stats的结果集中的字段名去查下联机丛书。---索引视图索引视图是具体化的视图--创建索引视图create view 视图名 with schemabinding asselect 语句go---创建索引视图需要注意的几点1. 创建索引视图的时候需要指定表所属的架构--错误写法create view v_f with schemabinding asselect   a.a,a.b,b.a,b.bfrom   a join b on   a.id=b.idgo---正确写法:create view v_f with schemabinding asselect   a.a,a.b,b.a,b.bfrom   dbo.a join dbo.b on   a.id=b.idgo2.在创建索引视图的select语句时,不使用*,必须指定具体的列名--错误写法create view v_f with schemabinding asselect   *from   dbo.a join dbo.b on   a.id=b.idgo---正确写法create view v_f with schemabinding asselect   a.a,a.b,b.a,b.bfrom   dbo.a join dbo.b on   a.id=b.idgo3.在创建索引视图的select 语句中,不能存在重复的列名,这个不举例了4. 只能为索引视图创建唯一聚集索引--正确的写法create unique clustered index ix_uniquetb on v_tbgo--错误的写法 create clustered index ix_uniquetb on v_tbgo---使用索引优化数据库查询效率1.不宜创建索引的情形(1)经常插入,修改和删除的表(2)数据量比较小的表,因为查询优化器在搜索索引时所花费的时间可能会大于遍历全表的数据所需要的时间2.适合创建索引的情形(1)为where子句中出现的列创建索引(2)创建组合索引(3)为group by 子句中出现的列创建索引3.聚集索引的设计原则(1)该列的数值是唯一的或者很少有重复的记录(2)经常使用between ...and..按顺序查询的列(3)定义identity的唯一列.(4)经常用于对数据进行排序的列.---无法使用索引的select语句1.对索引列使用了函数,如:select * from tb where max(id)=1002.对索引列使用了'%xx',如:select * from tb where id like '%1'需要注意的不是所有使用like关键字的select 语句都无法使用索引,比如select * from tb where id like '1%'就可以使用索引3.在where子句中对列进行类型转换(其实也是使用到了函数)4.在组合索引的第1列不是使用最多的列,如在下面3个查询语句中建立组合索引,按顺序包含col2,col1,id列;select * from tb where id='1' and col1='aa'select id,sum(col1) from tb group by idselect * from tb where id='2' and col2='bb'则第一句和第二句无法使用到索引 所以需要注意组合索引的顺序5.在where 子句中使用in关键字的某些句子当在in关键字后面使用嵌套的select语句,将无法使用在该列上定义的索引如:select  *from ta where id in (select id from tb where ....)--这样可以用到索引select * from tb where id in('1','2')


[解决办法]
sf
[解决办法]
SF
[解决办法]
学习,小F记得放到BLOG里,我慢慢看
[解决办法]
bd
[解决办法]

我是学习来的


[解决办法]
看来以后要站在小F的头上看世界了。
[解决办法]
装 2005
------解决方案--------------------


支持share
[解决办法]
o
[解决办法]
oh 。。。 好楼太冷!
[解决办法]

探讨
技术帖子是没有人看的  继续红楼梦 不过手太冷 懒得敲字

[解决办法]
收藏了
[解决办法]
jf
[解决办法]
继续学习...
[解决办法]
记下了
[解决办法]
同学习.
[解决办法]
share!!
[解决办法]
共享无极限,谢谢
[解决办法]
mark
[解决办法]
感谢分享

热点排行