MySQL数据库的索引和视图

一.索引

1.索引介绍:

查询复杂度:这的是查询的次数,测试复杂度采用的是悲观态度。复杂度用O(x)表示。

常规的查询:指顺序查询,按照顺序查询到结果为结束。复制速度为O(n).。比如我想查找一个容量为20的数据,查到第5个是想要                        的结果,那复杂度也是O(20).

排序的目的是为了提高查询效率

对于MySQL任意一张表,常规使用的查询方法也是顺序查找。

树结构:

根节点

内部结点

叶子节点

Mysql为了优化查询,提出索引概念。

当用户创建索引的时候,mysql首先复制数据,完成一个新的Btree(平衡树)数据结构,mysql 索引默认用的时候B+tree结构。

平衡树:左树和右树高度相差不能高过1。

1.有一个根节点,根节点为空或者有一个记录和有两个子节点。

2 .每个节点当做key和指针相互分割,指针指向子节点。

3.d表示输的宽度,除叶子节点之外,其他每个节点有(d/2,d-1)条数据,而且key从做导游从大到小排列。

4.在一个子节点当做,第n个字数所有key,小于这个节点当做的第n个key,大于这个节点,当做的第n-1个key。

5.所有的叶子节点必须在同一层次上。

用二分查找(logn)

索引是数据结构,可以加快我们的查询效率。单数创建索引需要我们复制数据,会占用资源。

使用索引的区间:

当我们使用索引后,查询指定数据返回的数据是总数据的3%-5%我们认为是合适的。

少量数据不适合使用索引。

2.索引的设立:

索引分类:

普通索引 就是一个普通索引,可以为空,可以重复。

ALTER TABLE teacher ADD INDEX(column)

唯一索引:可以为空,不可以重复

ALTER TABLE teacher  ADD UNIQUE(column);
ALTER TABLE teacher ADD column type UNIQUE;

主键索引:不可以为空,不可以重复。(只要是主键,就是索引)

ALTER TABLE teacher ADD PRIMARY KEY(column);

多列索引:

ALTER TABLE teacher ADD INDEX(column1,column2,column3);

使用索引:

1.少量数据不使用索引,

2.查询次数少,不使用索引,

3.查询要携带索引字段,通常放在select 之后第一个。

4.索引提高了查询的效率,占用更多的资源。

 

3.索引的删除

DROP INDEX 索引名 on 表名;

4.查看索引

SHOW INDEX 索引名 on 表名;

5,索引的优点:

  1. 提高数据检索效率
  2. 创建唯一索引,保证数据库表中每一行数据的唯一性。
  3. 加速表与表之间的连接,特别是在实现数据参考完整性方面特别有意义。
  4. 在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间

  5. 通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能

6.索引的缺点:

  1. 索引占用了一定的物理空间
  2. 创建和维护索引要耗费时间,且耗费的时间随数据量的增加而增加。
  3. 当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。

    注意:有索引的列增删改的速度比没索引的要慢得多。(比如:你要把《西游记》放到书架里,没有索引直接随便放一个书架就可以了,速度很快;但是有索引的时候,你需要依次找到:文学–>古典文学–>中国古典文学…一直到四大名著,然后把《西游记》放进去,速度慢的多。)
     

7.不推荐创建索引的情况:

  1. 少量数据不使用索引,

  2. 查询次数少,不使用索引,

  3. 定义为text和image和bit数据类型的列不要增加索引。

二.视图

View:当查询的复杂度比较大,多表,多关系,会导致查询语句混乱,不利于sql语句的编写和编 写的sql语句的可读性。于是mysql推出了视图模式。

视图模式是对一个查询的结果进行记录,世图里面只存放语句,不存放结果,类似于虚表。

1.视图优点:

1、简单,试图构建了一个虚拟的逻辑表,这个表里面的数据来自于指定的查询,而查询可 以是多表联查。在使用的时候,我们可以直接对试图表里面的数据进行查询,不用从原始 表查。

2、安全,数据库有权限设置,但是没有对行和列的权限。所以如果对一个表里的数据设置 不同的权限,mysql本身的权限设置有些不够,我们用试图查询出用户需要的数据,用户基 于试图进行查询。

3、数据独立,一旦试图试图的结构决定,可以屏蔽表结构变化给用用户带来的影响,在原 表当做增加一列。

2.视图的缺点:

试图会降低查询的效率。尤其在试图当做的查询当做再次使用试图。

创建视图:

CREATE VIEW 视图名 AS(基本语法)

例如

CREATE VIEW student_sun AS( SELECT name,age FROM student where name like "%赵%");

3.视图的使用:

比如 student 表中有name gender age 字段 但是age 字段不想被查看的人看见,所以需要使用视图。

CREATE VIEW student_sun AS(select name,gender from student where name like "%赵%");

这样age字段 就不会被看见了。

4.删除视图:

DROP VIEW 视图名

猜你喜欢

转载自blog.csdn.net/weixin_43567965/article/details/88647292