索引 Index

索引类型
  • 普通索引: 形式:key(字段名) --允许被索引的数据列包含重复的值
  • 唯一索引: 形式:unique key(字段名) --设定其字段的值不能重复,可以为空
  • 主索引: 形式:primary key(字段名) --必须为主键字段创建一个索引。有区分该表中的任何一行数据的作用(唯一性),不能为空
  • 外键索引: foreign key(字段名) references 其它表(对应其它表中的字段名)–如果为某个外键字段定义了一个外键约束条件,MySQL就会定义一个内部索引来帮助自己以最有效率的方式去管理和使用外键约束条件
  • 复合索引: 用户在多个列上建立的索引。 --但复合索引在数据库操作期间所需的开销更小,可以代替多个单一索引
索引的优点
  • 大大加快数据的检索速度;
  • 加速表和表之间的连接;
  • 在使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间。
索引的缺点
  • 索引需要占物理空间。
  • 当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,降低了数据的维护速度。
操作
创建普通索引
create index index_name on t1(col)


修改普通索引
alter table t1 add index index_name(col)
                   unique unique_name(col)      唯一索引
                   primary key(col)             主键索引


show index from t1


drop index index_name on t1
alert table t1 drop index index_name
                    unique unique_name
                    primary key	pk_name

视图 View

就是一段代码,把它‘封闭’起来,并给一个名子,用该名子就可以使用了

视图算法:分为三种
  • Undefined 未定义(默认)这不是一种实现使用的算法,是一种推卸责任的算法,告诉系统,视图没有定义算法,系统自己看首办
  • Temptable 邻时表算法系统应该先执行视图的select 语句,后执行外部查询语句
  • Merger 合并算法系统应该先将视图对应的select 语句与外部视图的select 语句进行合并,然后执行(效率高,常态)
算法指定

在创建视图的时候: create algorithm = 指定算法 view 视图名子 as select 语句;

查看

show create view v_name\G

视图算法选择

如果视图的select 语句中会包含一个查询子句(5子句),而且很有可能顺序比外部的查询语句要靠后,一定要使用算法Temptable, 其他可以默认

操作
create view v_t1[字段名1,字段名2...] as 普通的SQL 语句

create view v_t1 as select * from t1;
create view v_t1 as select * from t1 where id>4 and id<8;

select * from v_t1;
show tables;
drop view v_t1;