[推荐] ------我的一些笔记(三)-------- 20fredrickhu]

发布时间:2014-1-1 0:09:48编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"[推荐] ------我的一些笔记(三)-------- 20fredrickhu]",主要涉及到[推荐] ------我的一些笔记(三)-------- 20fredrickhu]方面的内容,对于[推荐] ------我的一些笔记(三)-------- 20fredrickhu]感兴趣的同学可以参考一下。

本帖最后由 fredrickhu 于 2010-01-13 09:45:08 编辑 --结合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 i on   i.object_id=o.object_id inner join    sys.index_columns ic on   ic.index_id=i.index_id and ic.object_id=i.object_id inner join   sys.columns c on   ic.column_id=c.column_id and ic.object_id=c.object_id go --查询索引的键和列信息 select    o.name as 表名,   i.name as 索引名,   c.name as 字段编号, from   sysindexes i inner join sysobjects o  on   i.id=o.id inner join   sysindexkeys k  on   o.id=k.id and i.indid=k.indid inner join   syscolumns c  on   c.id=i.id and k.colid=c.colid where   o.name='表名' --查询数据库db中表tb的所有索引的随片情况 use db go select    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 a join   sys.indexes as b on   a.object_id=b.object_id  and   a.index_id=b.index_id go ---解释下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  as select 语句 go ---创建索引视图需要注意的几点 1. 创建索引视图的时候需要指定表所属的架构 --错误写法 create view v_f with schemabinding  as select    a.a,a.b,b.a,b.b from    a join b  on    a.id=b.id go ---正确写法: create view v_f with schemabinding  as select    a.a,a.b,b.a,b.b from    dbo.a join dbo.b  on    a.id=b.id go 2.在创建索引视图的select语句时,不使用*,必须指定具体的列名 --错误写法 create view v_f with schemabinding  as select    * from    dbo.a join dbo.b  on    a.id=b.id go ---正确写法 create view v_f with schemabinding  as select    a.a,a.b,b.a,b.b from    dbo.a join dbo.b  on    a.id=b.id go 3.在创建索引视图的select 语句中,不能存在重复的列名,这个不举例了 4. 只能为索引视图创建唯一聚集索引 --正确的写法 create unique clustered index ix_uniquetb on v_tb go --错误的写法  create clustered index ix_uniquetb on v_tb go ---使用索引优化数据库查询效率 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)=100 2.对索引列使用了'%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 id select * 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里,我慢慢看

小F全2005以上的,我2000的咋办呐

bd

引用 4 楼 sql77 的回复:小F全2005以上的,我2000的咋办呐 装 2005 啊 我在下载 2008 哈哈

我是学习来的    

看来以后要站在小F的头上看世界了。

装 2005

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

支持share

o

oh 。。。 好楼太冷!

引用 10 楼 fredrickhu 的回复:技术帖子是没有人看的  继续红楼梦 不过手太冷 懒得敲字 ……小F好雅兴

收藏了

jf

继续学习...

记下了

同学习.

share!!

共享无极限,谢谢

mark

感谢分享

--错误写法 create view v_f with schemabinding  as select    a.a,a.b,b.a,b.b from    a join b  on    a.id=b.id go ---正确写法: create view v_f with schemabinding  as select    * from    dbo.a join dbo.b  on    a.id=b.id go 2.在创建索引视图的select语句时,不使用*,必须指定具体的列名 --错误写法 create view v_f with schemabinding  as select    a.a,a.b,b.a,b.b from    dbo.a join dbo.b  on    a.id=b.id go ---正确写法 create view v_f with schemabinding  as select    a.a,a.b,b.a,b.b from    dbo.a join dbo.b  on    a.id=b.id go 这里 是不是有问题

Up!

D

引用 24 楼 feixianxxx 的回复:SQL code--错误写法createview v_fwith schemabindingasselect    a.a,a.b,b.a,b.bfrom    ajoin bon    a.id=b.idgo---正确写法:createview v_fwith schemabindingasselect*from    dbo.ajoin dbo.bon    a.id=b.idgo2.在创建索引视图的select语句时,不使用*,必须指定具体的列名--错误写法createview v_fwith schemabindingasselect    a.a,a.b,b.a,b.bfrom    dbo.ajoin dbo.bon    a.id=b.idgo---正确写法createview v_fwith schemabindingasselect    a.a,a.b,b.a,b.bfrom    dbo.ajoin dbo.bon    a.id=b.idgo 这里 是不是有问题 是的  谢谢小麦

技术贴看不太懂啊

好啊,定一个,楼主

引用 8 楼 acmain_chm 的回复:看来以后要站在小F的头上看世界了。 O(∩_∩)O~

看不懂啊

支持一下﹗

顶一下,学习学习

4.在组合索引的第1列不是使用最多的列,如在下面3个查询语句中建立组合索引,按顺序包含col2,col1,id列; select * from tb where id='1' and col1='aa' select id,sum(col1) from tb group by id select * from tb where id='2' and col2='bb' 则第一句和第二句无法使用到索引 所以需要注意组合索引的顺序 这个不太明白

能不能解释一下

先看看-----

这个的意思是如果建立了组合索引 col2,col1,id 因为第一,二句没有用到col2  则索引失效 如果索引顺序为id,col1,col2 则索引都有效 与组合索引的顺序有关

study

强烈支持,真是好东西啊,努力学习

学习!

学习。

学习

引用 37 楼 fredrickhu 的回复:这个的意思是如果建立了组合索引 col2,col1,id  因为第一,二句没有用到col2  则索引失效  如果索引顺序为id,col1,col2 则索引都有效 与组合索引的顺序有关 thank you

4.在组合索引的第1列不是使用最多的列,如在下面3个查询语句中建立组合索引,按顺序包含col2,col1,id列; select * from tb where id='1' and col1='aa' select id,sum(col1) from tb group by id select * from tb where id='2' and col2='bb' 则第一句和第二句无法使用到索引 所以需要注意组合索引的顺序 不是很明白第一句和第二句无法使用到索引 所以需要注意组合索引的顺序,按顺序包含col2,col1,id列,是什么顺序呢?

好难啊!!!

哦,知道了

对索引列使用了'%xx',如: select * from tb where id like '%1' 需要注意的不是所有使用like关键字的select 语句都无法使用索引,比如 select * from tb where id like '1%'就可以使用索引 这里的对索引列使用了'%xx',如: select * from tb where id like '%1',sql2005已经对这个进行了修改,是可以继续使用索引的~~~

地地道道的

mark

引用 44 楼 linux_ch 的回复:4.在组合索引的第1列不是使用最多的列,如在下面3个查询语句中建立组合索引,按顺序包含col2,col1,id列; select * from tb where id='1' and col1='aa' select id,sum(col1) from tb group by id select * from tb where id='2' and col2='bb' 则第一句和第二句无法使用到索引 所以需要注意组合索引的顺序 不是很明白第一句和第二句无法使用到索引 所以需要注意组合索引的顺序,按顺序包含col2,col1,id列,是什么顺序呢? 建立组合索引是有一个顺序的  这里 如果这样建立 create index f on tb(col2,col1,id) 和 create index f on tb(id,col1,col2) 是不一样的  这个就是组合索引的顺序

学习  学习

.在组合索引的第1列不是使用最多的列,如在下面3个查询语句中建立组合索引,按顺序包含col2,col1,id列; select * from tb where id='1' and col1='aa' select id,sum(col1) from tb group by id select * from tb where id='2' and col2='bb' 则第一句和第二句无法使用到索引 所以需要注意组合索引的顺序  这个应该这样理解吧:在where中的条件要存在包含索引中第一个键,否则是无法用到包含索引

学习  学习

引用 52 楼 linux_ch 的回复:.在组合索引的第1列不是使用最多的列,如在下面3个查询语句中建立组合索引,按顺序包含col2,col1,id列; select * from tb where id='1' and col1='aa' select id,sum(col1) from tb group by id select * from tb where id='2' and col2='bb' 则第一句和第二句无法使用到索引 所以需要注意组合索引的顺序 这个应该这样理解吧:在where中的条件要存在包含索引中第一个键,否则是无法用到包含索引 恩 可以这么理解 请看我37楼的解释 

学习中。

好   学习中

先收藏在慢慢看!

  不错 ..谢谢楼主

继续学习...

学习了

楼主很用心!!!

dd

学习

gz

学习

引用 10 楼 fredrickhu 的回复:技术帖子是没有人看的  继续红楼梦 不过手太冷 懒得敲字 小F 莫非白天看红楼 晚上上青楼 好雅兴

受教ING

学习ing 

SF

收藏

fdgdfgfdg

sf

 .......   

学习中············

D

收藏

好东西, 支持一下

定一下 牛 

学习......

学习……

小F哥,向你看齐。

哈哈整理到Blog中去吧,在这儿不好阅读的啊 UP

必须是精华

学习

xuexi

很强大嘛

弄点积分

好东西,学习

UP一下

定顶

使劲定啊。哈哈啊

好东西 学习学习

学习学习

wo de jifenne

看不懂

继续努力~

100


上一篇:在SQL Server中,怎样将数据加密存储到表中? 40llyybb]
下一篇:请高手帮忙 20a152342008]

相关文章

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。

好贷网好贷款