zoukankan      html  css  js  c++  java
  • 索引_笔记

    索引:

    索引,使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种

    结构。

    在关系数据库中,索引是一种与表有关的数据库结构,它可以使对应于表的sql语句执行的更快。索引的作用

    相当于图书的目录,可以根据目录中的页码快速找到所需的内容。当表中有大量记录时,若要对表进行查询,

    第一种搜索信息方式是全表搜索,是将所有记录一一取出,和查询条件进行一一对比,然后返回满足

    条件的记录,这样做会消耗大量数据库系统是将,大量磁盘i/o操作;第二种就是在表中建立索引,然

    后在索引中找到符合查询条件的索引值,最后通过保存在索引中的rowid(相当于页码)快速找出表中

    对应的记录。

    索引是一个单独的,物理的数据库结构,它是某个表中一列或若干值的集合和相应的指向表中

    物理标识这些值的数据页的逻辑指针清单。

    索引提供指向存储在表的指定列中的数据值的指针,然后根据您指定的排序顺序对这些指针排序,

    数据库中使用索引的方式与您使用书籍中的索引方式很类似:它搜索索引以找到特定值,然后顺时针

    找到包含该值得行。

    在数据库关系图中,可以在选定表的“索引/键“属性页中创建,编辑或删除每个索引类型。当

    保存索引所附加到的表,或保存该表所在的关系图时,索引将保存在数据库中。

    旧称通简,备检或引得。组成的基本单位是索引款目。款目一般包括索引词,说明或注释语,出处

    3项内容。所有索引款目实现有序化编排。其本质特征是只揭示内容出处或文献线索,并不直接提供

    事实,资料本身。主要功能是为人们准确,迅速地获得文献资料提供线索性指导。

    在数据库系统中建立索引主要有以下作用:

    (1)快速取数据

    (2)保证数据记录的唯一性

    (3)实现表与表之间的参照完整性

    (4)在使用order by,group by子句进行检索时,利用索引可以减少排序和分组时间。

    索引优点:

    1.大大加快数据的检索速度;

    2.创建唯一性索引,保证数据库表张每一行数据的唯一性。

    3.加速表和表之间的连接

    4.在使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间

    索引缺点:

    1.索引需要占物理空间

    2.当对表中的数据进行增加,删除和修改的时候,索引也要动态的维护,降低了数据的维护速度

    在创建索引之前,必须确定要使用哪些列以及要创建的索引类型。

    索引类型

    根据数据库的功能,可以在数据库设计器中创建四种索引:普通索引,唯一索引,主键索引和

    聚集索引。

    普通索引:

    这是最基本的索引类型,而且它没有唯一性之类的限制。普通索引可以通过下面几种方式创建:

    创建索引,例如create index<索引名字> on tablename(列的列表);

    修改表,例如alter table tablename add index [索引名字](列的列表);

    创建表的时候指定索引,例如create table tablename([...],index[索引名字](列的列表));

    唯一索引:

    唯一索引是不允许其中任何两行具有相同索引值得索引。

    当现有数据中存在重复的键值时,大多数据库不允许将新创建的唯一索引与表一起保存。数据库还可

    能防止添加将在表中的创建重复键值的新数据。例如,如果在employee表中职员的性lname上

    创建了一个索引,则任何两个员工都不能同性。

    创建唯一索引的几种方式:

    创建索引,例如create unique index<索引的名字> on tablename(列的列表);

    修改表,例如alter table tablename add unique [索引名字](列的列表);

    创建标的时候指定索引,例如create table tablename([...],unique[索引的名字](列的列表));

    主键索引:

    数据库表经常有一列或列组合,其值唯一标识表中的每一行,该列称为表的主键。

    在数据库关系图中为表定义主键将自动创建主键索引,主键索引是唯一索引的特定类型。该索引

    要求主键中每个值都唯一。当在查询中使用主键索引时,它还允许对数据的快速访问。

    尽管唯一索引有助于定位信息,但为获得最佳性能结果,建议改用主键索引。

    聚集索引:

    在聚集索引中,表中行的物理顺序与键值的逻辑(索引)顺序相同。一个表只能包含一个聚集索引。

    如果某索引不是聚集索引,则表中行的物理顺序与键值的逻辑顺序不匹配。聚集索引通常提供更快

    的数据访问速度。

    注意事项

    并非所有的数据库都以相同的方式使用索引。作为通用规则,只有当经常查询索引列中的数据时,才

    需要在表中创建索引。索引占用磁盘空间,并且降低添加,删除和更新行的速度。在多数情况下,索引

    用于数据检索的速度优势大大超过它的不足之处。但是如果应用程序非常频繁地更新数据或者磁盘空间

    有限,则可能需要限制索引的数量。

    可以基于数据库表中的单列或多列创建索引。多列索引使您可以区分其中一列可能有相同值得行。

    如果经常同时搜索两列或多列或按两列或多列排序时,索引也很有帮助。例如,如果经常在同一查询

    中为姓和名两列设置判据,那么在这两列创建多列索引将很有意义。

    确定索引的有效性:

    检查查询的where和join子句。在任一子句中包括的每一列都是索引可以选择的对象。

    对新索引进行试验以检查它对运行查询性能的影响。

    考虑已在表上创建的索引数量。最好避免在单个表上有很多索引。

    检查已在表上创建的索引的定义。最好避免包含共享列的重叠索引。

    检查某列中唯一数据值的数量,并将该数量与表中的行数进行比较。比较的结果就是该列的可选择性,

    这有助于确定是否适合建立索引,若适合,确定索引类型

    Create index PersonIndex

    On Person(LastName)

    Mysql创建视图,索引:

    数据库的三级模式两级映射:

    存储文件-->基本表-->视图

    内模式-->模式-->外模式

    一.视图

    1.什么是视图?

    视图是从一个或多个表中导出来的表,是一种虚拟存在的表。

    视图就像一个窗口,通过这个窗口可以看到系统专门提供的数据。

    这样,用户可以不用看到整个数据库中的数据,而只关心对自己有用的数据。

    数据库中只存放了视图的定义,而没有存放视图中的数据,这些数据存放在原来的表中。

    使用视图查询数据时,数据库系统会从原来的表中取出对应的数据。

    视图中的数据依赖于原来表中的数据,一旦表中数据发生改变,显示在视图中的数据也会发生改变

    2.视图的作用:

       (1)使操作简单化,可以对经常使用的查询定义一个视图,使用户不必为同样的查询操作指定条件

       (2)增加数据的安全性,通过视图,用户只能查询和修改指定的数据。

       (3)提高表的逻辑独立性,视图可以屏蔽原有表结构变化带来的影响

    3.视图操作sql:

    创建视图:

    Create view viewName(参数列表/可以不写这样就默认和下面的select一样)as select * from 表名

    例1:

    (1) create table viewdemo(id int primary key,name varchar(10),score float);

    (2) Create view view1 as select * from viewdemo;

    (3) Create view view2(name,score) as select name,score from viewdemo;

    修改视图:

    Alter view viewname(column) as select columns from tableName;

    Alter view view2(id,name) as select id,name from viewdemo;

    二.索引

    1.什么是索引

    索引是一个单独的、存储在磁盘上的数据库结构,它们包含着对数据库表里所有记录的引用指针。

    Mysql中索引的存储类型有两种:Btree和hash,具体和表的存储引擎有关。Mysqlam和innoDB存储引擎

    只支持btree索引。

    2.索引的好处

    适当使用索引能提升数据库查询速度

    3.在创建表的时候创建索引

    Create table 表名[列名称 数据类型]

    [unique|fulltext][index|key][索引名称](列名称[length])[ASC|desc]

    (1)普通索引index:是mysql的基本索引类型,允许在定义索引的列中插入重复值和空值。

    Create table book

    (

    Bookid int not null,

    Bookname varchar(100) not null,

    Authors varchar(100) not null,

    Info varchar(500) null,

    Year_publication year not null,

    Index(year_publication)

    );

    (2)唯一索引unique:唯一索引列的值必须唯一,但允许有空值。主键索引是一种特殊的唯一索引,不允许有空值

    Create table book

    (

    Id int not null,

    Name char(50) not null,

    Unique index uniqueIdx(id)

    );

    (3)联合索引:组合索引即是在多列上创建索引。查询时,只有在查询条件中使用了这些字段(创建组合索引的

    时候指定哪些列)的最左边字段是,索引才会被使用。

    Create table strudent

    (

    Id int not null,

    Name char(50) not null,

    Age int not null,

    Info varchar(200),

    Index multidx(id,name,age)

    );

    (4)全文索引:mysql  mysqlam存储引擎支持fulltext索引,并且类类型为char,text,varchar。并且

    需要指定表的存储引擎为mysqlal。

    Creaete table t4

    (

    Id not null,

    Name varchar(50) not null,

    Age int not null,

    Info varchar(200),

    Fulltext index fullindexname(info)

    )engine=mysqlam;

    在已经存在的表上创建索引:

    语法:

    Alter table table_name add[unique|fulltext][index|key][index_name](col_name[length],...)[asc|desc]

    (1)普通索引 alter table book add index indexName(bookname(30));

    (2)唯一索引:alter table book add unique index UniqueIdx(bookid);

    (3)组合索引:alter table t6 add fulltext index infilx(info);

    使用create index 创建索引:

    语法:

    Create [unique|fullText] [index|key} index index_name on table_name(col_name{length],...)[asx|desc]

    例:在表book的bookname字段建立名为BkNameidx的索引。

    Create index BkNameIdx on book(bookname);

    例:在book表的bookId字段建立唯一索引。

    Create unique index UniqueIdx on book(bookId);

    4.删除索引;

    (1)alter table table_name drop index index_name;

    (2)Drop index index_name on table_name;

    5.总结:

    这样我们的视图和索引就建立了,是不是建立了视图我们可以使用show table查看,是不是已经建立了索引以及是不是

    有效我们也可以使用explain select * from student where name=’sss’;来查看这样就会出现一张表其中就有select_type按这里

    的查询类型我们就可以知道是不是建立的索引有效。
    当我们建立了表,视图,索引之后如果你想删除则要考虑这样一个问题,即和这个表有关的所有对象都删除还是只

    删除这个表;

    Cascade(级联)restrict(限制)以上的是由这两个来完成。

    Delete table student cacade;删除所有和student表相关的对象(视图,索引,触发器)。

    Delete table student strict;只删除student表。

    解释:聚集索引就是逻辑顺序和物理顺序保持一致,所以只能建立一个聚集索引,但可以建立多个唯一索引等。

    索引:

     注:笔记部分可能参考其他作者内容的一个记录,仅为加深自己对概念的理解,这里一些可能忘记参考谁的了,所以望见谅。

  • 相关阅读:
    1.Spring Framework 5.0 入门篇
    Spring,Spring MVC,Spring Boot 三者比较
    函数式编程:函数作为变量和函数的计算结果
    函数式编程:面向可复用的map和pipeline机制的编程语言
    异常处理的本质
    Error handling in Swift does not involve stack unwinding. What does it mean?
    函数式编程介绍
    pure funtion
    函数式编程与命令式编程
    命令式编程是面向计算机硬件的抽象
  • 原文地址:https://www.cnblogs.com/cangdingju/p/5520133.html
Copyright © 2011-2022 走看看