当前位置:   article > 正文

MySQL 视图与索引_mysql 视图无法使用索引

mysql 视图无法使用索引

相对于2008年5.1版本加入的事务管理和分区操作,视图和存储过程在2003年的5.0版本就推出了。而索引的概念就更早了,MySQL最早的MyISAM(之前叫ISAM)就支持全文索引和树索引,而InnoDB只支持树索引,因此在查询性能方面MyISAM更胜一筹,但是InnoDB却能够提供更健全的事务管理(MyISAM是不支持的)。

一.视图​

虚拟表,没有真实的存在,而是在使用过程中依据基表动态生成。 如果修改视图的数据,那么基表也会进行修改。

MySQL磁盘data目录:

.frm 数据结构文件

.ibd:数据索引文件

视图不能独立存在,他需要依赖于表(可以使多张)

通过视图可以增删改表基表底层的数据

视图主要应用于查询,尽量不要用于增删改。
  • 1
  • 2
  • 3
  • 4
  • 5

创建视图:

create view emp_view as select * from emp where deptno=10;

-- 因为条件都变了,主表deptno为10的全部变成20,而视图本身映射的是deptno为10的,所以不会查到
# 数据。
update emp_view set deptno=20;   

-- with check option :保证视图数据的安全,不允许修改视图创建条件字段。
create or replace view emp_view as select * from where deptno=10 with check 
option;

-- 视图的销毁
drop view 视图名称 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

视图优点:

安全性(隐藏字段)

简化开发

数据定制化
  • 1
  • 2
  • 3
  • 4
  • 5

二.索引

为了提升效率而定制的一个数据结构,需要独立的空间来维护(需要占用资源) -> 表需要进行进行删改操作。可以使用单列索引,也可以使用多列联合索引。

-- type属性为性能指标,用来查看逻辑执行计划,类似hive的执行计划
explain select * from emp; 
  
-- 性能指标
system > const > eq_ref> ref > fullytext > ref_or_null > index_merge > 
unique_subquery > index_subquery > range> all
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

创建索引:

create index indx_ename on emp(ename);
  • 1

索引的添加采用:

采用B+树

依赖于存储引擎

索引列如何选择:

表的数据量应该是比较大的表(几千条以上),选择高基数列(这列的数据尽量是不重复的)

索引语法:单列索引,组合(多列)索引:

1) 一般索引

create index index_xxx on 表名(字段名,....);
drop index index_xxx on 表名
  • 1
  • 2

2) 唯一索引

create unique index index_xxx on 表名(字段名,....);
drop unique index index_xxx on 表名
  • 1
  • 2
声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号