好贷网好贷款

[推荐] 【屌丝的周末】屌丝的周末对着电脑左手鼠标右手键盘,实在无聊就发一个以前整理的东东吧,作为资深屌丝什么时候才能逆天啊 300Beirut]

发布时间:2016-12-3 14:55:54 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"[推荐] 【屌丝的周末】屌丝的周末对着电脑左手鼠标右手键盘,实在无聊就发一个以前整理的东东吧,作为资深屌丝什么时候才能逆天啊 300Beirut]",主要涉及到[推荐] 【屌丝的周末】屌丝的周末对着电脑左手鼠标右手键盘,实在无聊就发一个以前整理的东东吧,作为资深屌丝什么时候才能逆天啊 300Beirut]方面的内容,对于[推荐] 【屌丝的周末】屌丝的周末对着电脑左手鼠标右手键盘,实在无聊就发一个以前整理的东东吧,作为资深屌丝什么时候才能逆天啊 300Beirut]感兴趣的同学可以参考一下。

本帖最后由 Beirut 于 2012-07-21 10:41:48 编辑 索引的原理及索引建立的注意事项 --创建索引时的注意事项 /********************************************************************************  *主题:创建索引时的注意事项  *说明:本文起点可能会相对高点,首先你的很熟悉索引以及他们的存储结构  *      有很多地方你可能觉得有异议,欢迎一起讨论  *作者:Beirut(小爱)  *日期: 2012.07.21  *另外:转载请著名出处。 **********************************************************************************/ 聚集索引,数据实际上是按顺序存储的,数据页就在索引页上。就好像参考手册将所有主题按顺序编排一样。一旦找到了所要搜索的数据,就完成了这次搜索,对于非聚集索引,索引是安全独立于数据本身结构的,在索引中找到了寻找的数据,然后通过指针定位到实际的数据。 SQL Server中的索引使用标准的B-树来存储他们的信息,如下图所示,B-树通过查找索引中的一个关键之来提供对于数据的快速访问,B-树以相似的键记录聚合在一起,B不代表二叉(binary),而是代表balanced(平衡的),而B-树的一个核心作用就是保持树的平衡。同伙向下遍历这棵树以找到一个数值并定位记录。因为树是平衡的,所以寻找任何记录都只需要等量的资源,而且获取的速度总是一致的—因为从根索引叶索引都具有相同的深度。 索引的中间层次是根据表的行数一级索引行的大小而变化的,如果使用一个较长的键(KEY)来创建索引,一个分页上就只容纳较少的条目,因而索引就需要更多分页(或者说更多层),页越多那么查找就需要话费相对较长的时间来找到所需要的信息,索引就可能不太有用了。 聚集索引 聚集索引的叶级别不仅包含了索引键,还包含了数据页。另一种说法数据本身也是聚集索引的一部分,聚集索引基于键值保持表中的数据有序,表中的数据页是通过一个被称作页链(page chain)的双向链接表来维护的,由于实际的数据页的页链只能按一种方式排序,因此一张表只能拥有一个聚集索引。 这里可能有一个误区,有很多介绍SQL Server索引的文档会告诉读者:聚集索引按照排序顺序(sorted order)物理地存储数据。如果以为物理存储就是磁盘本身的话就会产生误解。试想如果聚集索引需要按照特定顺序在实际的磁盘上维护数据的话,那么任何修改操作都将会产生相当高昂的代价。当一个页变满了需要一分为二的时候,所有后续页面上的数据都必须向后移动。聚集索引中的排序顺序(sorted order)仅仅表示数据页链在逻辑上是有序的。 大多数表都应该需要一个聚集索引。优化器非常倾向于采用聚集索引,因为聚集索引能够直接在叶级别找到数据。由于定义了数据的逻辑顺序,聚集索引能够特别快的访问针对范围值的查询,查询优化器能够发现只有某一段范围的数据页需要扫描。 非聚集索引 对于非聚集索引,叶级别不包含全部的数据。除了键值之外,每个叶级别(树的最底层)中的索引行包含了一个书签(bookmark),告诉SQL Server可以在那里找到与索引键相应的数据行。一个书签可能有两种形式。如果表上存在聚集索引,书签就是相应的数据行的聚集索引键。如果彪是堆(heap)结构,书签就是一个行表示(row identifier,RID),以“文件号:页号:槽号”的格式来定位实际的行。 主键(PRIMARY KEY)与聚集索引(CLUSTER INDEX) 严格来说,主键与聚集索引没有任何关系,如果要说有话,那就是表中没有聚集索引的时候,创建的主键默认就是聚集索引(除非有特别设置为NOCLUSTER)。 在主键与聚集索引的处理方面,注意以下事项: 1、主键不与聚集索引分离 2、聚集索引键列尽量避免使用int之外的数据类型 3、尽量避免使用复合主键 创建索引时的注意事项 1、始终包含聚集索引 当表中不包含聚集索引时,表中的数据是无序的,这会降低数据检索效率。即使通过索引缩小了数据检索的范围,但由于数据本身是无序的,当从表中提取实际数据时,会产生频繁的定位问题,这也使得SQL Server基本上不会使用无聚集索引表中的索引来检索数据。 2、保证聚集索引唯一 由于聚集索引是非聚集索引的行定位器,如果它不唯一,则会使行定位器中包含辅助数据,同时也导致从表中提取数据时,需要借助行定位器中的辅助数据来定位,这会降低处理效率。 3、保证聚集索引最小 每个聚集键值都是所有非聚集索引的叶结点记录,它越小,意味着每个非聚集索引的索引叶包含的有效数据越多,这对于提升索引效率很有好处。 4、覆盖索引 覆盖索引是指索引中的列包含了数据处理中涉及的所有列,覆盖索引相当原始表的一个子集,由于这个子集中包含了数据处理涉及的所有列,因此操作这个子集就可以满足数据处理需要。一般而言,如果大多数处理都只涉及某个大表的某些列,可以考虑为这些列建立覆盖索引。 覆盖索引的建立方法是将要包含的列中的关键列做为索引键列,将其他列做为索引的包含列(使用索引创建语句中的INCLUDE子句)。 5、适量的索引 当数据发生变化时,SQL Server会同步维护相关索引中的数据,过多的索引会加影响数据变更的处理效率。因此,只应该在经常使用的列上建立索引。 适量的索引还体现在对索引列的组合方式的控制上。例如,如果有两个列col1和col2,这两个列的组合会产生三种使用情况:单独使用col1、单独使用col2及同时使用col1和col2。如果有为每种情况都建立索引,则需要建立三个索引。但也可以只建立一个复合索引(col1, col2),这样能够依次满足col1+col2、col1、col2这三种方式的查询,其中,col2利用这个查询会比较勉强(还要配合单独的统计),可以视实际情况确定是否需要为col2建立单独的索引。 特别注意: 不要建立重复索引,目前最常见的重复索引是单独为某个列建立主键和聚集索引 与直接从表中提取数据相比,根据索引检索数据,多了一个索引检索的过程,这个过程要求能够尽量缩小数据检索范围,并且使用最少的时间,这样才能真正保证能够通过索引提高数据检索效率。 实现上述目的,对于索引键列的选择,应该遵循如下原则: 选择性原则 选择性是满足条件的记录占总记录数的百分比,这个比率应该尽可能低,这样才能保证通过索引扫描后,只需要从基础表提取很少的数据。 如果这个比率偏高,则不应该考虑在此列上建立索引。 数据密度原则 数据密度是指列值唯一的记录占总记录数的百分比,这个比率越高,则说明此列越适合建立索引。 在考虑数据密度的时候,还要注意数据分布的问题,只有经常检索的密度高时,才适合建立索引。例如,如果一张表有10万记录,虽然某个列不重复的记录有9万条,但如果经常检索的2万条记录,其不重复的列值才几十条的话,这个列是不太适合建立索引的。另一种情况是,整体数据密度不大,但经常检索的数据的密度大,例如订单的状态,一般来说,订单的状态就几种,但已经Close的订单往往占整个数据的绝大部分,但数据处理的时候,基本上都是检索未Close的订单,这种情况下,为订单的状态列建立索引还是比较有效的(SQL Server 2008中,可以为这种列建立具有更佳效果的筛选索引)。 6、索引键列大小 一般不宜为超过100Byte的列建立索引。 7、复合索引键列顺序 在索引中,索引的顺序主要由索引中的每一个键列确定,因此,对于复合索引,索引中的列顺序是很重要的,应该优先把数据密度大,选择性列,存储空间小的列放在索引键列的前面。 更毒精彩内容请访问 屌丝的博客 在下面是csdn 的LM广告,跟本人无关

占个沙发 慢慢看

支持一下了。

我去,楼上的几位屌丝手真快啊,看来都是练家子啊

讨论个技术问题 不知LZ对int型自增列或组合字段做primary key的选择是什么? 更倾向于哪个.

讨论个技术问题 不知LZ对int型自增列或组合字段做primary key的选择是什么? 更倾向于哪个.

屌丝楼主你的标题看着真费劲,改得颜色吧

引用 5 楼  的回复:讨论个技术问题 不知LZ对int型自增列或组合字段做primary key的选择是什么? 更倾向于哪个. 通常会选择自增做primary key 当然也默认成聚集,为了保证聚集的列足够小 然后组合字段加索引。 而不组合字段上直接走primary key

MARK,支持

什么意思呢。真的看不懂。

标题很长,文章也长...

顶爱姐

看得懂看不懂的,先顶顶再说

好文支持一下!!

顶大牛 小爱, 学习!

顶顶。。。学习下

每天回帖即可获得10分可用分

每天回帖即可获得10分可用分

学习数据库必备的常识啊!收藏了!

学习数据库必备的常识啊!收藏了!

虽然还没看完,但觉得应该很屌!

尤其是那个图,比联机文档上还屌!

想请教一下,那标题着色怎么用的哦

为什么是"左手鼠标右手键盘"而不是“右手鼠标左手键盘”

虽然还没看完,但觉得应该很屌!

虽然还没看完,但觉得应该很屌!

回帖换积分

好多牛和神啊

每天回帖即可获得10分可用分!

都以屌丝为荣了都

果然是屌丝 虽然还没看完,但觉得应该很屌!

顶一个

顶一个 

学习下

真是个装逼的屌丝

技术没前途啊 ,钻石现实生活中也是屌丝。

虽然不知道楼主在丝什么,但感觉好像很屌的样子

屌絲終有翻身時.

学习,学习。

已经看完了,还是觉得很屌

支持下,屌屌的说果然很屌

已经看完,果然很屌。

屌丝的周末对着电脑左手鼠标右手键盘?这里不明白,为啥LZ是左手拿鼠标,右手拿键盘呢?

每天回帖即可获得10分可用分

据说sql2008有 既递增又guid的字段类型 了?

IT人才:年入50万(各IT公司总监级别人物,有房有车,生活压力相对较小) IT工程师:年入20万(高级经理级别,有房贷,生活压力大) IT民工:年入10万(经理级别,基本无房,学会装波一,生活压力大) 码农:年入6万到10万(工作三四年,租房,继续混日子) 码奴:年入3万到6万(工作一两年,租房,混日子) 码畜:年入低于3万(刚毕业的,租房,傻乐)  

每天回帖即可获得10分可用分

mark 

果断收藏!

只要是好技术,都应该止步观看。

mark一下

支持楼主

该回复于2012-07-23 10:23:49被版主删除

每天回帖即可获得10分可用分!小技巧:

虽然还没看完,但觉得应该很屌!

懂不懂不重要  只要我们依然前进在屌的方向上  

我是来看左撇子的

不错,标题有点莫名

哎,看了很多索引设计的文章,感觉就是东一块,西一块,不够系统性,探究中

学习了。。

真心不错……  顶顶

相当不错,路过,楷点分,飘飘的走了!

收藏!!

胸章很惹眼...

大家一起顶

留后门

屌丝的困惑、。。。

牛人楼主啊,顶礼膜拜

原来是小爱,讲的不错

顶楼主,厉害

sql的技术文档上写的,还是楼主自己总结出来的?

不错。顶个

引用 25 楼  的回复:尤其是那个图,比联机文档上还屌! 我找的网图,我也觉的这个比帮助以及很多书上的牛逼,哈哈

引用 85 楼  的回复:原来是小爱,讲的不错 阳光妞,求勾搭。。。。。。。。

技术贴只有一个结果,就是被水掉了。。。。。。。。 同志们晚安,睡觉了。。。。。。。

收藏了。。很不错吆。。

慢慢看 ,占个沙发

看完了哦,写的不错。

顶个再看

学习下

mark下、回头好看看

回帖拿分,必须滴

虽然不太懂,但也支持下

LZ高手  求解惑 http://topic.csdn.net/u/20120723/18/4825d91e-69ed-435a-ba6f-8777f90cef49.html?74635

上一篇:[推荐] 【如何更有效地在SQL Server论坛上提问】 300htl258]
下一篇:.Net高手请进,关于table.select()的问题 20youhaoxinqin]

相关文章

相关评论