【七天入门数据库】第六天 MySQL的视图与索引

 系列文章传送门:

【七天入门数据库】第一天 MySQL的安装部署

【七天入门数据库】第二天 数据库理论基础

【七天入门数据库】第三天 MySQL的库表操作

【七天入门数据库】第四天 数据操作语言DML

【七天入门数据库】第五天 MySQL的备份恢复

一、MySQL视图

(一)什么是视图

  • 视图通过以定制的方式显示来自一个或多个表的数据
  • 视图是一种数据库对象,用户可以像查询普通表一样查询视图
  • 视图内其实没有存储任何数据,它只是对表的一个查询
  • 视图的定义保存在数据字典内,创建视图所基于对表称为“基表”

例如经常要对emp和dept表进行连接查询,每次都要做表的连接,写同样的一串语句,同时由于工资列队数据比较敏感,对外要求不可见。对这样的问题就可以通过视图来解决。

(二)创建视图

CREATE  [OR REPLACE]  VIEW  视图名 [(别名1,别名2...)]  AS  源表  [WITH READ ONLY];

  1. 视图必须有唯一命名

  2. 在mysql中视图的数量没有限制

  3. 创建视图必须从管理员那里获得必要的权限

  4. 视图支持嵌套,也就是说可以利用其他视图检索出来的数据创建新的视图

  5. 在视图中可以使用OREDR BY,但是如果视图内已经使用该排序子句,则视图的ORDER BY将覆盖前面的 ORDER BY。

  6. 视图不能索引,也不能关联触发器或默认值

  7. 视图可以和表同时使用

(三)修改视图

CREATE OR REPLACE VIEW 要修改的视图名(别名1,别名2.....)as 源表;

在CREATE VIEW 语句中字段与子查询中的字段必须一一对应,否则就别指定别名,或在子查询中指定别名。

(四)查看视图

select * from 视图名

(五)删除视图

删掉视图不会导致数据的丢失,因为视图是基于数据库的表之上的一个查询定义。

DROP VIEW 视图名;

二、索引

(一)什么是索引

        索引是一种特殊的数据库结构,可以用来快速查询数据库表中的特定记录。索引是提高数据库性能的重要方式。MySQL中,所有的数据类型都可以被索引。MySQL的索引包括普通索引、惟一性索引、全文索引、单列索引、多列索引和空间索引等。

        索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度。(注意:一般数据库默认都会为主键生成索引)。

(二)索引的原理

就是把无序的数据变成有序的查询。

  1. 把创建的索引的列的内容进行排序

  2. 对排序结果生成倒排表

  3. 在倒排表内容上拼上数据地址链

  4. 在查询的时候,先拿到倒排表内容,再取出数据地址链,从而拿到具体数据

(三)索引的设计原则

为了使索引的使用效率更高,在创建索引的时候必须考虑在哪些字段上创建索引和创建什么类型的索引。本小 节将向读者介绍一些索引的设计原则。

  1. 选择惟一性索引

  2. 为经常需要排序、分组和联合操作的字段建立索引

  3. 为常作为查询条件的字段建立索引

  4. 限制索引的数目

  5. 尽量使用数据量少的索引

  6. 尽量使用前缀来索引

  7. 删除不再使用或者很少使用的索引

(四)创建索引

创建索引是指在某个表的一列或多列上建立一个索引,以便提高对表的访问速度。创建索引有三种方式,这三种方式分别是创建表的时候创建索引、在已经存在的表上创建索引和使用ALTER TABLE语句来创建索引。

1、创建表的时候同时创建索引

Create table index1(
    Id int,
    Name varchar(20),
    Sex boolean,
    index(id),
);

2、直接创建索引

CREATE INDEX index_name ON table(column(length))

3、修改表结构的方式添加索引

ALTER TABLE table_name ADD INDEX index_name ON (column(length))

(五)查看索引

1、查询索引:Show create table index1 \G

2、查询某张表中索引情况:show index from table_name;

3、 使用计划查询SQL使用索引情况:Explain select * from index1 where id=1 \G

(六)删除索引

        删除索引是指将表中已经存在的索引删除掉。一些不再使用的索引会降低表的更新速度,影响数据库的性能。

对应已经存在的索引,可以通过DROP语句来删除索引。基本形式如下:

DROP INDEX 索引名 ON 表名;

三、索引的类型

(一)唯一性索引(Unique)

Create table index2(
    Id int unique,
    Name varchar(20),
    Unique index index2_id(id asc)
);

(二)全文索引(FULLTEXT)

       MySQL从3.23.23版开始支持全文索引和全文检索,FULLTEXT索引仅可用于 MyISAM 表,他们可以从CHAR、VARCHAR或TEXT列中作为CREATE TABLE语句的一部分被创建,或是随后使用ALTER TABLE 或CREATE INDEX被添加。

        对于较大的数据集,将你的资料输入一个没有FULLTEXT索引的表中,然后创建索引,其速度比把资料输入现有FULLTEXT索引的速度更为快。不过切记对于大容量的数据表,生成全文索引是一个非常消耗时间非常消耗硬盘空间的做法。只能创建在char,varchar或text类型的字段上

create table index3(
    Id int,
    Info varchar(20),
    Fulltext index index3_info(info)
);

(三)单列索引

Create table index4(
    Id int,
    Subject varchar(30),
    Index index4_st(subject(10))
); 

(四)多列索引

使用多列索引时一定要特别注意,只有使用了索引中的第一个字段时才会触发索引。如果没有使用索引中的第一个字段,那么这个多列索引就不会起作用,也就是说多个单列索引与单个多列索引的查询效果不同,因为执行查询时,MySQL只能使用一个索引,会从多个索引中选择一个限制最为严格的索引。

Create table index5(
    Id int,
    Name varchar(20),
    Sex char(4),
    Index index5_ns(name,sex)
);

(五)空间索引(Spatial)

Create table index6(
    Id int,
    Space geometry not null,
    Spatial index index6_sp(space)
)engine=myisam;

建空间索引时,表的存储引擎必须是myisam类型,而且索引字段必须有非空约束。空间数据类型包括geometry,point,linestring和polygon类型等,平时很少用到。

都看到这里了,创作不易,大家点个赞再走啦!!- ̗̀(๑ᵔ⌔ᵔ๑)

你可能感兴趣的:(七天入门数据库,数据库,mysql)