百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>数据库> Sql Server的一些知识点定义总结
分享文章到:

Sql Server的一些知识点定义总结

发布时间:05/13 来源:未知 浏览: 关键词:

数据库完备性:是指数据库中数据在逻辑上的一致性、准确性、有效性和相容性

  实体完备性(Entity Integrity 行完备性):实体完备性指表中行的完备性。主要用于保证操纵的数据(记载)非空、独一且不反复。即实体完备性要求每个关系(表)有且仅有一个主键,每一个主键值必须独一,而且不允许为“空”(NULL)或反复。

  域完备性(Domain Integrity 列完备性):是指数据库表中的列必须知足某种特定的数据类型或束缚。其中束缚又包括取值范畴、精度等规定。表中的CHECK、FOREIGN KEY 束缚和DEFAULT、 NOT NULL定义都属于域完备性的范围。

  参照完备性(Referential Integrity)属于表间法则:关于永恒关系的相干表,在更新、插入或删除记载时,要是只改其一,就会影响数据的完备性。如删除父表的某记载后,子表的响应记载未删除,致使这些记载称为孤立记载。

  参照完备性法则(Referential Integrity)要求:若属性组F是关系模式R1的主键,同时F也是关系模式R2的外键,则在R2的关系中,F的取值只允许两种可能:空值或等于R1关系中某个主键值。

Sql Server的存储构造,页、区、堆

  页:用于数据存储的陆续的磁盘空间块,SQL Server中数据存储的根本单位是页,磁盘I/O操纵在页级施行,页的大小为8KB。每页的开头是96字节的页头,用于存储有关页的系统信息,包括页码、页类型、页的可用空间以及具有该页的对象的分配单元ID;其他便是存储数据的数据行与剩下可用空间,构造图如下(个人绘制)

    区间:区是治理空间的根本单位,一个区是8个物理上陆续的页(即64KB)的汇合,所有页都存储在区中。SQL Server有两品种型的区:同一区和混合区。

        堆:堆是指不含汇集索引的表,它的数据不按任何次序进行存储。

        联络一个堆中的数据的独一构造是被称为索引分配映射(IAM)的一个位图页,当扫描对象时,SQl server运用IAM页来遍历该对象的数据。

   堆表内的数据页和行没有任何特定的次序,也不链接在一起。数据页之间独一的逻辑连贯是记载在IAM页内的信息

假如某订单明细表中有100万条数据,需要查询某个订单的明细数据,如下:

select*fromT_EPZ_INOUT_ENTRY_DETAILwhereentry_apply_id='31227000034000090169'

要是在堆表中进行查询,SQLServer通过扫描IAM页对堆表进行全表扫描,对entry_apply_id比较100万次,要是以entry_apply_id字段创立索引,则由于索引键值数据都必定以B-Tree有次序的摆放,所以可采纳二分查找找数据。也就是2的N次方大于记载数,就可以找到该条数据。而2的20次方大于100万,因而最多找寻20次就可以找到该条记载。20次与100万次的比较,你可以轻松感想出机能的悬殊。

由此引出索引的概念

  索引分为汇集索引与非汇集索引

  汇集索引 :汇集索引是指数据库表行中数据的物理次序与键值的逻辑(索引)次序雷同。一个表只能有一个汇集索引,由于一个表的物理次序只要一种状况,所以,对应的汇集索引只能有一个。要是某索引不是汇集索引,则表中的行物理次序与索引次序不匹配,与非汇集索引比拟,汇集索引有着更快的检索速度

  非汇集索引:非汇集索引是一种索引,该索引中索引的逻辑次序与磁盘上行的物理存储次序不一样

  汇集索引与非汇集索引的形象比喻

  汉语字典的正文自身就是一个汇集索引。 比方,我们要查“安”字,就会很天然地掀开字典的前几页,由于“安”的拼音是“an”,而按照拼音排序汉字的字典是以英文字母“a”开头并以“z”结尾的,那么“安”字就天然地排在字典的前部。要是您翻完了所有以“a”开头的局部依然找不到这个字,那么就注明您的字典中没有这个字;一样的,要是查“张”字,那您也会将您的字典翻到最后局部,由于“张”的拼音是“zhang”。也就是说,字典的正文局部自身就是一个目录,您不需要再去查其他目录来找到您需要找的内容。正文内容自身就是一种按照一定例则排列的目录称为“汇集索引”。每个表只能有一个汇集索引,由于目录只能按照一种要领进行排序

  要是您相识某个字,您可以迅速地从主动中查到这个字。但您也可能会碰到您不相识的字,不晓得它的发音,这时候,您就不能按照方才的要领找到您要查的字,而需要去依据“偏旁部首”查到您要找的字,然后依据这个字后的页码直接翻到某页来找到您要找的字。但您联合“部首目录”和“检字表”而查到的字的排序并不是真正的正文的排序要领,比方您查“张”字,我们可以看到在查部首之后的检字表中“张”的页码是672页,检字表中“张”的上面是“驰”字,但页码却是63页,“张”的下面是“弩”字,页面是390页。很显然,这些字并不是真正的离别位于“张”字的高低方,此刻您看到的陆续的“驰、张、弩”三字现实上就是他们在非汇集索引中的排序,是字典正文中的字在非汇集索引中的映射。我们可以通过这种方式来找到您所需要的字,但它需要两个历程,先找到目录中的效果,然后再翻到您所需要的页码。我们把这种目录纯粹是目录,正文纯粹是正文的排序方式称为“非汇集索引”。 

  如图,表中寄存的数据是紊乱无章的,没有按照姓名进行排序。我们将数据的姓名提掏出来按照姓名创建一个非汇集索引。索引中姓名是排好序的,且索引所占用的空间远远小于表中数据所占用的空间,当我们查询表中某条数据时候,将不再进行全表扫描,而对索引进行扫描,得到想要的数据再定位到表中具体的数据。  但是 在非汇集索引上,要扫描某个具体的姓名也得耗费一定的工夫,进一步优化,在其上面在加一个Non-leaf level (非叶节点)可以B树算法迅速的定位。极大的提高了查询速度

   汇集索引的查询就是按B树查询

     怎样查询表中的索引?    

 inidex_id = 0 注明表中无索引 inidex_id = 1 表中为汇集索引, inidex_id = 2或者3.。。。。为非汇集索引。    

使用索引碰到的题目以及技术

    页破裂、添补因子、碎片整理、索引统计

    页破裂:由于在非汇集索引中或者有序的数据中 如 在a b e f中要插入新的数据 c ,那么c在物理次序中将放入f的背面,成为 a b e f c这样变造成了页破裂。     

    可以用索引整理、或者在建表时定义添补因子(就是页创建之初,让每个页存储的数据占页的比列)解决页破裂的状况

dbcc showcontig(Tstudent,non_sname) --Tstudent表明,PK_TStudent索引名 ,查询页破裂状况
 
 dbcc indexdefrag(schoolDB,Tstudent,non_sname)--索引整理
 
 create nonclustered index non_sname on TStudent(sname) with drop_existing,fillfactor = 50--重建索引,并且拟定添补因子
 
 dbcc show_statistics(tstudent,non_sname)--查看索引统计
 
 update statistics schooldb.dbo.tstudent --人工更新表中所有索引的统计
 
 update statistics schooldb.dbo.tstudent non_sname --人工更新表中non_sname索引统计

  在现实状况中,有时候不一样索引会比用索引的速度更快,在使用索引查询的时候,但是sql server工具会主动帮你判断

总结

以上就是这篇文章的全部内容了,但愿本文的内容对大家的学习或者工作拥有一定的参考学习价值,要是有疑难大家可以留言交换,感谢大家对我们的支撑。

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有157人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板