索引和视图

来源:互联网 发布:ed视频剪辑软件下载 编辑:程序博客网 时间:2024/05/02 02:08

 

  视图与索引:
  是两个完全不同的对象,但是有一点是相同的,它们都是与一个表或数据库相关联,尽管每一个对象只能与一个特定的表相关联,但它们还是通过对数据的预排序和预定义显著地提高了表的工作性能。
 

 

   一:索引:索引使数据库程序无须对整个表进行扫描,就可以在其中找到所需的数据。当进行数据检索时,系统先搜索索引,从中找到数据的指针,再直接通过指针从表中取数据!
   (1)占用存储空间
   (2)在表中执行insert、delete、update操作时,将有额外的操作来维护索引
   (3)过多的索引起反作用


   索引:类似目录,会让你的查询更快速,更高效,适用于访问大型数据库。
 
   索引的分类
   有3种索引类型:聚集索引、非聚集索引和唯一索引。
   如果表中存在聚集索引,则非聚集索引使用聚集索引来加快数据查询。

   <1>.聚集索引
   聚集索引会对表和视图进行物理排序,所以这种索引对查询非常有效,在表和视图中只能有一个聚集索引。当建立主键约束时,如果表中没有聚集索引,SQL Server会用主键列作为聚集索引键。可以在表的任何列或列的组合上建立索引,实际应用中一般定义成主键约束的列建立聚集索引。
   <2>.非聚集索引
   非聚集索引不会对表和视图进行物理排序。如果表中不存在聚集索引,则表示未排序的。在表或视图中,最多可以建立250个非聚集索引,或者249个非聚集索引和1个聚集索引。
   <3>.唯一索引
   唯一索引不允许两行具有相同的索引值。只要列中数据是唯一的,就可在同一个表上创建一个唯一的聚集索引。如果必须实施唯一性以确保数据的完整性,则应在列上创建UNIQUE或PRIMARY KEY约束,而不要创建唯一索引。

   

 

   索引优点:查询快
   1:一般是作用于where子句所给出的条件相匹配的行
      一是在关联操作中与其他数据表所匹配的行。
   2:对于使用mix() 和max()函数的查询的列
   3:经常使用order by 和group by的列
   4:索引可以加快查询速度,不用扫描整个表


   索引缺点
   (1)索引虽然加快查询的速度,但是会降低写入操作,比如插入,修改,删除数据
   (2)索引要占据磁盘空间,索引越多占据空间越大
   (3)占用存储空间
   (4)在表中执行insert、delete、update操作时,将有额外的操作来维护索引
   (5)过多的索引起反作用

    建立索引的原则:
    创建索引虽然可以提高查询速度,但是它是牺牲一定的系统性能。因此,在创建时,哪些列适合创建索引,哪些列不适合创建索引,需要进行判断,具体以下原则:
   
    <1>.有主键的数据列要建立索引。因为主键可以加速定位到表中的某一行。
    <2>.有外键的数据列要建立索引。外键列通常用于表与表之间的连接,在其上创建索引可以加快表间的连接。
    <3>.对于经常查询的数据列最好建立索引。
        A.对于需要在指定范围内快速或频繁查询的数据列,因为索引已经排序,其指定的范围是连续的,查询可以利用索引的排序,加快查询的时间。
        B.经常用在WHERE子句中的数据列,将索引建立在WHERE子句的集合过程中,对于需要加速或频繁检索的数据列,可以让这些经常参与查询的数据列按照索引的排序进行查询,加快查询的时间。

   
  
  
   4,全文索引
   创建索引,默认是asc排序,使用btree
   create  index  index_name   on  tbl_name (column  asc{default}|desc)
   如果相关表已经使用Memory引擎建立,则使用hash索引
   create index  index_name  using btree|hash   on   on  tbl_name (column  asc)


   散列索引对于“=”和“<=>”操作进行匹配时速度极快,但是对于范围查找和比较查找比较慢

   唯一索引
   create  unique  index  index_name  on tbl_name  (column)

  
   注意:(1)如果给表中某字段加了 主键约束 或是 唯一约束 ,这时会自动帮你 建立对应这个字段的 唯一索引
         (2)索引不要轻易的建立

  

 

   二:视图:就是一张虚拟表,视图就是一个子查询!实际当中的数据依然存在实际的表里面,只不过取的时候是根据这个视图(也就是这个子查询)从实际当中的表里面取出来.
  
   视图由视图名和视图定义两个部分组成。视图是从一个或多个表导出来的表,它实际上是一个查询结果,视图的名字和视图对应的查询存储在数据字典中。
   
   视图:将查询语句压缩,使大部分查询语句放在服务端,而客户端只输入你要查询的信息,而不用写出大量的查询代码,这其中也是一个封装的过程。

   优点:简化查询缺点:你建视图建多了,如果这表结构突然改了,那么你视图也要跟着改!增加了你维护的支出!所以建的view越多,维护起来越麻烦.

   创建视图语法
   create view  <view name>[<column list>]   as   <table expression>  [with [cassaded | local ] check option]
   创建视图
   create  view  view_name  as  select  column1,column2  from tbl_name  where   xxx>xx
   创建视图时指定列
   create  view  view1 (va1,va2,va3)  as  select  va1,va2,va3 from tbl  where  va1<num;
   

   三、视图的作用
   1、提高了用户安全功能
   2、可以进行单位换算
   3、创建一个新的虚拟表格式
   4、简单的结构化复合查询


   创建视图的限制:
   在创建视图时,还要注意试图必须满足以下几点限制:
   <1>.不能将规则或者DEFAULT定义关联于视图。
   <2>.定义视图的查询中不能含有ORDER BY\COMPURER\COMPUTER BY 子句和INTO关键字
   <3>.如果视图中某一列是一个算术表达式、构造函数或者常数,而且视图中两个或者更多的不同列拥有一个相同的名字(这种情况通常是因为在视图的定义中有一个连接,而且这两个或者多个来自不同表的列拥有相同的名字),此时,用户需要为视图的每一列指定列的名称。

 

  

 

 

 

0 0