首页 > 其他 > 详细

9-视图、索引

时间:2020-12-27 10:12:37      阅读:43      评论:0      收藏:0      [点我收藏+]

1、视图

  • 语法:
# 创建视图
create view 视图名 as select 语句 [with check option];
注: 添加with check option表示如果插入的值不满足筛选条件时,报错。
# 修改视图
alter view 视图名 as select 语句;
  • 插入或修改视图数据,可以相应地对基本表进行操作,反过来也成立。但并不是所有情况都成立,比如创建的视图是在原表基础上有删选条件。

  • 视图创建须知:

    • 创建的视图中使用聚合函数,不能进行修改

    • 创建试图时,不能使用视图或用户变量

    • 在存储过程中不能修改视图

    • 在临时表中不能创建视图

    • 可以在视图中继续创建视图

    • 如果使用多表连接,除非视图和多表所有列数之和相同,否则不能修改视图

2、索引

  • 特点:

    • 大大提高查询速度,但降低了写入速度。故当存在大量插入数据的场景,可先禁用索引,等数据插入完成再次启用。

    • 索引也是存储数据,会占用磁盘空间,有时索引会大于数据表。

    • 多表查询时,使用索引可以避免笛卡尔积,提高查询效率,但至少有一张扫描要进行全文扫描。

    • mysql中不能在索引中执行like操作。

      注:如果表内容经常变化,要不定期执行{analyze table 表名},可优化表。{optimize table 表名}

  • 类型:

    • 普通索引(index):数据无约束

    • 唯一性索引(unique index):唯一

    • 主键索引(primary index):唯一非空。当创建了主键,自动就是主键索引。

    • 全文索引(fulltext index): 用于检索文本信息。

    • 多列索引:创建一个索引,包括多列。先按一个字段排序,如果排不出来,再按第二个字段排序,依次类推。多列索引第一个字段必须出现在select语句中,如果没有,则不使用该索引。多列索引性能高于多个单列索引。

    • 覆盖索引:一个索引包含或覆盖所有查询字段的值

  • 语法:

# 单独创建方式添加
create index 索引名 on 表名(列名); //多列用逗号分隔
# 修改方式添加
alter table 表名 add index|keys 索引名(列名);
# 建表时添加
create table 表名(
列1 数据类型1,
列2 数据类型2,
index 索引名(列名)     //创建属性索引时,关键字index被相应替换
);
# 查看索引
show index from 表名\G
# 删除索引
alter table 表名 drop index 索引名;
# 控制索引
alter table 表名 enable|disable keys;   // 启用|禁用索引
  • 索引工作方式
1、先把索引列的数据拿到索引

2、在索引里对数据列进行排序,排序默认算法为平衡二叉树(BTREE)。

3、根据索引里的数据指针指向表中对应的数据列

4、插入数据时,BTREE会进行调整,以保证平衡二叉树算法。

  • explain: 优化器,可以分析select语句。
示例:
mysql> explain select * from mm1 where id=8\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: mm1
   partitions: NULL
         type: ref
possible_keys: fbi
          key: fbi
      key_len: 2
          ref: const
         rows: 2
     filtered: 100.00
        Extra: NULL
1 row in set, 1 warning (0.00 sec)

# 注:explain执行select并非实际执行
示例说明:
- type:               扫描类型。all为全表扫描。
- possible_keys:       预测使用的索引
- key:                 实际执行使用的索引
- rows:                本次查询涉及数据行数
- Extra:               使用定位条件.若无索引为using where.

9-视图、索引

原文:https://www.cnblogs.com/ly447742/p/14195451.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!