视图存储过程触发器索引,索引和视图用不太官方的说法,怎么解释

               我们把一个表中的一列或者多列和列中元素所在表中记录的物理地址组合成一个新的表。这个表的记录大致为列的内容和该列所在记录的物理地址。 

 优点:大大加快了对源表的执行速度,我们对索引表的检索就可以实现对源表的检索。到底快在哪里?举例说明:我们通过T-SQL语句查询源表中的一条记录,在没有索引表的时候,计算机首先把整个源表从外存加载到内存,然后再一一匹配,从外存加载到内存耗时是非常的大;在有索引的时候,计算机首先加载索引表,然后匹配,找到后,取出它的物理地址,此时,再从外存中加载源表中的该记录,这种方法,人看的时候麻烦,但计算机可能就不那么认为(具体还要看源表记录的长度和数量) 

视图由一张表或多张表的列数据组成的一张虚拟表,所谓虚拟表,就是该整体表在硬盘上不存在,其实,我们创建一个视图,实际上是创建了一个经过包装了的Select语句,在这里我们称为A,创建视图,就是我们往硬盘存放了A,我们调用该视图的时候,系统就会自动执行一遍A,然后,我们看见的就是一张表了。(这张表数据的改变时,基表变不变,那要看具体情况了,可以说明的是,我们可以通过虚拟表达到改变基表数据的目的) 

 数据库管理系统为了对数据的管理更加高效,采用的是整块数据进行管理操作,这个管理方式对于数据库管理系统来说是非常的好的,但是,这种管理方式对于应用程序来说不好,因为我应用程序对于操作管理的数据是很少的,而且针对性也强,根据应用程序的这些特点,我们为了使应用程序更加的高效,我们创建了游标,游标就是为了完成对结果集中的数据进行更小单位的操作,也就是对结果集中的数据的操作是按一条一条记录进行的,所以,游标由结果集(可以是零条、一条或由相关的选择语句检索出的多条记录)和结果集中指向特定记录的游标位置组成。游标是由管理多数据到少数据,操作不确定数据到确定性数据,对数据针对性弱到针对性强的一种产物。 

               触发器就是特殊的存储过程,特殊在,触发器不需要通过人为(例:在程序中调用)的操作来启动它,触发器的启动是由事件(删除、更新等)的执行来自动启动的。

视图就是通过查询得到一张虚拟表,然后保存下来,下次用的直接使用即可

如果要频繁使用一张虚拟表,可以不用重复查询

对于一个应用来说,对数据库的读写比例基本上是10:1,即读多写少
而且对于写来说极少出现性能问题,大多数性能问题都是慢查询
提到加速查,就必须用到索引

索引就相当于书的目录,是mysql中一种专门的数据结构,称为key,
索引的本质原理就是通过不断地缩小查询范围,来降低io次数从而提升查询性能
强调:一旦为表创建了索引,以后的查询都会先查索引,再根据索引定位的结果去找数据

普通索引INDEX:加速查找
 -主键索引PRIMARY KEY:加速查找+约束(不为空、不能重复)
 -唯一索引UNIQUE:加速查找+约束(不能重复)
 
举个例子来说,比如你在为某商场做一个会员卡的系统。
会员备注信息 TEXT
那么这个 会员编号,作为主键,使用 PRIMARY
会员姓名 如果要建索引的话,那么就是普通的 INDEX
会员身份证号码 如果要建索引的话,那么可以选择 UNIQUE (唯一的,不允许重复)
#除此之外还有全文索引,即FULLTEXT
会员备注信息 , 如果需要建索引的话,可以选择全文搜索。
用于搜索很长一篇文章的时候,效果最好。
用在比较短的文本,如果就一两行字的,普通的 INDEX 也可以。
但其实对于全文搜索,我们并不会使用MySQL自带的该索引,而是会选择第三方软件如Sphinx,专门来做全文搜索。
#其他的如空间索引SPATIAL,了解即可,几乎不用

1、在表中有大量数据的前提下,创建索引速度会很慢,
2、在索引创建完毕后,对表的查询性能会大幅度提升,但是写性能会降低

特点:叶子节点存放的一整条数据

如果是按照这个字段创建的索引,
那么叶子节点存放的是:{名字:名字所在那条记录的主键的值}


覆盖索引:只在辅助索引的叶子节点中就已经找到了所有我们想要的数据

字段名1 数据类型 [完整性约束条件…], 字段名2 数据类型 [完整性约束条件…], #方法二:CREATE在已存在的表上创建索引 #方法三:ALTER TABLE在已存在的表上创建索引

  1、索引字段要尽量的小

  2、索引的最左匹配特性

索引的功能就是加速查找

mysql中的primary key,unique,联合唯一也都是索引,这些索引除了加速查找以外,还有约束的功能

前面提到了访问磁盘,那么这里先简单介绍一下磁盘IO和预读,磁盘读取数据靠的是机械运动,每次读取数据花费的时间可以分为寻道时间、旋转延迟、传输时间三个部分,寻道时间指的是磁臂移动到指定磁道所需要的时间,主流磁盘一般在5ms以下;旋转延迟就是我们经常听说的磁盘转速,比如一个磁盘7200转,表示每分钟能转7200次,也就是说1秒钟能转120次,旋转延迟就是1/120/2 = 4.17ms;传输时间指的是从磁盘读出或将数据写入磁盘的时间,一般在零点几毫秒,相对于前两个时间可以忽略不计。那么访问一次磁盘的时间,即一次磁盘IO的时间约等于5+4.17 = 9ms左右,听起来还挺不错的,但要知道一台500 -MIPS(Million Instructions Per Second)的机器每秒可以执行5亿条指令,因为指令依靠的是电的性质,换句话说执行一次IO的时间可以执行约450万条指令,数据库动辄十万百万乃至千万级数据,每次9毫秒的时间,显然是个灾难。下图是计算机硬件延迟的对比图,供大家参考:

考虑到磁盘IO是非常高昂的操作,计算机操作系统做了一些优化,当一次IO时,不光把当前磁盘地址的数据,而是把相邻的数据也都读取到内存缓冲区内,因为局部预读性原理告诉我们,当计算机访问一个地址的数据的时候,与其相邻的数据也会很快被访问到。每一次IO读取的数据我们称之为一页(page)。具体一页有多大数据跟操作系统有关,一般为4k或8k,也就是我们读取一页内的数据时候,实际上才发生了一次IO,这个理论对于索引的数据结构设计非常有帮助。

前面讲了索引的基本原理,数据库的复杂性,又讲了操作系统的相关知识,目的就是让大家了解,任何一种数据结构都不是凭空产生的,一定会有它的背景和使用场景,我们现在总结一下,我们需要这种数据结构能够做些什么,其实很简单,那就是:每次查找数据时把磁盘IO次数控制在一个很小的数量级,最好是常数数量级。那么我们就想到如果一个高度可控的多路搜索树是否能满足需求呢?就这样,b+树应运而生(B+树是通过二叉查找树,再由平衡二叉树,B树演化而来)。

如上图,是一颗b+树,关于b+树的定义可以参见,这里只说一些重点,浅蓝色的块我们称之为一个磁盘块,可以看到每个磁盘块包含几个数据项(深蓝色所示)和指针(黄色所示),如磁盘块1包含数据项17和35,包含指针P1、P2、P3,P1表示小于17的磁盘块,P2表示在17和35之间的磁盘块,P3表示大于35的磁盘块。真实的数据存在于叶子节点即3、5、9、10、13、15、28、29、36、60、75、79、90、99。非叶子节点只不存储真实的数据,只存储指引搜索方向的数据项,如17、35并不真实存在于数据表中。

###b+树的查找过程
如图所示,如果要查找数据项29,那么首先会把磁盘块1由磁盘加载到内存,此时发生一次IO,在内存中用二分查找确定29在17和35之间,锁定磁盘块1的P2指针,内存时间因为非常短(相比磁盘的IO)可以忽略不计,通过磁盘块1的P2指针的磁盘地址把磁盘块3由磁盘加载到内存,发生第二次IO,29在26和30之间,锁定磁盘块3的P2指针,通过指针加载磁盘块8到内存,发生第三次IO,同时内存中做二分查找找到29,结束查询,总计三次IO。真实的情况是,3层的b+树可以表示上百万的数据,如果上百万的数据查找只需要三次IO,性能提高将是巨大的,如果没有索引,每个数据项都要发生一次IO,那么总共需要百万次的IO,显然成本非常非常高。

1.索引字段要尽量的小:通过上面的分析,我们知道IO次数取决于b+数的高度h,假设当前数据表的数据为N,每个磁盘块的数据项的数量是m,则有h=㏒(m+1)N,当数据量N一定的情况下,m越大,h越小;而m = 磁盘块的大小 / 数据项的大小,磁盘块的大小也就是一个数据页的大小,是固定的,如果数据项占的空间越小,数据项的数量越多,树的高度越低。这就是为什么每个数据项,即索引字段要尽量的小,比如int占4字节,要比bigint8字节少一半。这也是为什么b+树要求把真实的数据放到叶子节点而不是内层节点,一旦放到内层节点,磁盘块的数据项会大幅度下降,导致树增高。当数据项等于1时将会退化成线性表。
2.索引的最左匹配特性:当b+树的数据项是复合的数据结构,比如(name,age,sex)的时候,b+数是按照从左到右的顺序来建立搜索树的,比如当(张三,20,F)这样的数据来检索的时候,b+树会优先比较name来确定下一步的所搜方向,如果name相同再依次比较age和sex,最后得到检索的数据;但当(20,F)这样的没有name的数据来的时候,b+树就不知道下一步该查哪个节点,因为建立搜索树的时候name就是第一个比较因子,必须要先根据name来搜索才能知道下一步去哪里查询。比如当(张三,F)这样的数据来检索时,b+树可以用name来指定搜索方向,但下一个字段age的缺失,所以只能把名字等于张三的数据都找到,然后再匹配性别是F的数据了, 这个是非常重要的性质,即索引的最左匹配特性。

oracle 触发器,序列,索引

4 /*触发器是一种特殊的存储过程,它与数据表紧密联系,用于保护表中的数据, 5 当一个定义了特定类型触发器的基表执行插入、修改或删除表中数据的操作时, 6 将自动触发触发器中定义的操作,以实现数据的一致性和完整性。 --创建视图,将两张表的数据结合,如果重复就不显示。使用内连接,主键=外键 71 ----创建一个 ‘替换’ 触发器 76 --修改名字,保留旧的主键 105 索引的优点: 提高查询效率 106 索引的缺点: 降低了数据更新的效率,增加了存储空间 107 常用查询的栏目才建立索引,并不是所有的位置建立索引都好,而且索引不要超过4个 108 使用规则: 数据量大,常用的查询栏目上建立索引

我要回帖

更多关于 视图存储过程触发器索引 的文章

 

随机推荐