# 视图和索引

  • 索引 (Index) 是影响数据性能的重要因素之一,设计高效的、合理的索引可以显著提高数据信息的查询速度和应用程序的性能。
  • 视图(View)是一个存储指定查询语句的虚拟表,视图中数据来源于由定义视图所引用的表,并且能够实现动态引用,即表中数据发生变化,视图中的数据随之变化

# 理解索引

MySQL 的索引是为了加速对数据进行检索而创建的一种分散的、物理的数据结构。
索引包含从表或视图中一个或多个列生成的键,以及映射到指定数据行的存储位置指针。
索引是依赖于表建立的,提供了数据库中编排表中数据的内部方法。
表的存储由两部分组成,一部分是表的数据页面,另一部分是索引页面。
索引就存放在索引页面上

# 索引的分类

  1. 普通索引
  2. 唯一索引
  3. 全文索引
  4. 单列索引
  5. 多列索引
  6. 空间索引

# 创建索引的方式

# 在创建表的时候创建索引

CREATE TABLE 表名(字段名 数据类型[完整性约束条件],
                  字段名 数据类型[完整性约束条件],
                  ......
           字段名 数据类型
          [UNIQUE|FULLTEXT|SPATIAL] INDEX|KEY
                  [别名] (字段名1 [(长度)]) [ASC|DESC]
                  );

例: 在 t1 表中 id 字段上建立索引
alt

例:创建一个表名为 t2 的表,在表中的 id 字段上建立索引名为 unique_id 的唯一性索引,并且按照升序排序
alt

例:创建一个表名为 t3 的表,在表中的 name 字段上建立索引名为 fulltext_name 的全文索引
alt

例:创建一个表名为 t4 的表,在表中的 name 字段上建立索引名为 single_name 的单列索引
alt

例:创建一个表名为 t6 的表,在表中的 id 和 name 字段上建立索引名为 multi 的多列索引
alt

# 使用 CREATE INDEX 语句在已经存在的表上创建索引

CREATE [UNIQUE|FULLTEXT] INDEX 索引名
ON 表名 (字段名 [(长度)] [ASC|DESC]);

在 book 表中的 bookid 字段上建立普通索引
alt
在 book 表中的 bookid 字段上建立唯一性索引
alt

在 book 表中的 comment 字段上建立单列索引
alt

在 book 表中的 authors 和 info 字段上建立多列索引
alt

# 使用 ALTER TABLE 语句在已经存在表上创建索引

ALTER TABLE 表名 ADD [UNIQUE|FULLTEXT]  INDEX 索引名 (字段名 [(长度)] [ASC|DESC]);

在表中的 bookid 字段上创建普通索引
alt

在表中的 bookid 字段上创建唯一索引
alt

在 book 表中的 comment 字段上建立单列索引
alt

# 删除索引

ALTER TABLE 表名 DROP  primary  key;
ALTER TABLE 表名 DROP INDEX 索引名;
ALTER TABLE 表名 DROP FOREIGN KEY fk_symbol;
DROP INDEX 索引名 ON 表名;

# 视图

# 创建视图

CREATE VIEW  view_name[(column_list)]
AS  SELECT_statement
[WITH  CHECK  OPTION]

在 student 表上创建 view_stu 视图
alt

# 查看视图

DESCRIBE 视图名;
SHOW TABLE STATUS LIKE '视图名'
SHOW CREATE VIEW 视图名;

# 修改视图

CREATE [OR REPLACE ]VIEW view_name [(column_list)]
AS SELECT_statement
[WITH CHECK OPTION]

使用 CREATE OR REPLACE VIEW 语句修改 view_stu 视图
alt

使用 ALTER 语句修改视图
alt

# 更新视图

使用 UPDATE 语句更新视图
alt

学习不易,诸君共勉!