.视图
i 什么是视图,数据库兑现,他是一个虚拟表,底层并非以键值形式保存数据,在执行的过程中,
动态的从基表中获取数据。(视图以表为底层来查询)
ii 视图基本语法
#查询班级id为1 的所有学生信息
create view view_student
as
select *from student where cid = 1 with check option;#添加上with check option保护视图数据,不能修改条件(cid)字段
iii 简单使用(执行增删盖茶操作和表中一致)
a)视图一般只执行查询,不执行正删改。
select *from view_student;
update view_student set sname = 'zs1' where sid =1;//修改了之后,原始表中的数据也会修改
update view_student set cid = 2 where sname ='zs1';//修改了之后,原始表中的数据也会修改
iv视图优点
1.安全(保密敏感数据)<有一部分字段是不希望别人看到的>
2.高效性,提高查询效率
3.定制化数据,可以将多张表中经常展示数据放置在视图中快速查询
v销毁视图
drop view view_student;
索引。
1.什么是索引(提升查询效率而创建数据结构)
a.B-Tree索引,B+树索引
MySQL中默认使用B+树方法来维护索引数据
B+树是一个多路搜索树
不同的存储殷勤对索引的存储策略是不一样的
myisam :叶子节点中保存记录的地址。
innodb :叶子节点直接保存响应数据。
b.位图索引
c.哈希索引
2.索引的创建
普通索引:
create index index_name on 表(字段)
explain select *from student where sname = 'lmk'; #type all rows 10
create index index_sname on student(sname);
explain select *from student where sname = 'lmk'; #type ref rows 1
唯一索引:(主键,唯一约束)特殊的唯一索引
create unique index index_name on 表(字段);
explain select *from student where sid = 2; #type const rows 1,
全文索引:
空间索引:
复合索引:多列作为索引字段create index index_name on 表(字段,字段)
删除索引:drop index index_sname on 表(字段);
3.索引列的选择
索引需要单独表文件来保存维护,
表数据发生变化需要维护索引表,
适合添加索引
表的数据量足够大
表如果增删改操作较少
高基数列(重复数据不能太多)
索引说明:
索引不适合添加过多
经常把索引列作为查询条件列适合作为索引
但是某些特殊情况下索引会失效(类似模糊查询,)
#查询班级中名字不同的所有学生(将名字相同的学生,只取出一个)
select * from student where sid in (select max(sid) from student group by sname)
#查询班级中所有名字重复的学生姓名
select * from student where sname in (select sname from student group by sname having count(1)>=2 );