1、视图
(1)什么是视图?
数据库对象,他是一一个虚拟表底层并非以键值形式保存数据,在执行过程中动态从基表中获取数据。(视图以表为底层来查询)
(2)视图的基本语法?
create view view_name
as
查询
#查询信息部门的员工信息
create view view_emp
as
select * from emp where deptno="信息部门";
#执行增删改查操作和表一致
2、索引
(1)、什么是索引?
提升查询效率而创建数据结构
(2)、索引分类
B-Tree:默认,MySQL中默认采用B+树方法来维护索引列数据。B+树是一个多路搜索树。
不同的存储引擎对索引的存储策略不一致。
mylsam:叶子节点中保存记录的地址
Innodb:叶子节点中直接保存相应的数据。
位图索引
哈希索引
(3)、索引的创建
普通索引:
create index index_name on 表(字段);
#查看查询效率
EXPLAIN SELECT * FROM purchase_order WHERE purchase_id='287539220190520090550123';
#给表添加索引
create index index_purchase_id on purchase_order(purchase_id);
唯一索引:
create unique index index_name on 表(字段);
全文索引:
空间索引:
复合索引:多列作为索引字段
(4)、索引的删除
drop index 名字 on 表;
(5)、索引的选择
索引需要单独文件来保存维护。
表数据发生变化需要维护索引表。
适合添加索引的表:表数据量足够大,增删改操作较少
适合添加索引的字段:高基数列,
索引说明:索引不适合添加过多,经常作为查询条件的列适合作为索引,但是某些特殊情况下索引会失效。
3、数据库优化
(1)sql优化:
a、尽量减少*得使用(*会被转换为列名,再进行查询)
b、索引失效问题:
索引列不要使用is not null/is null
索引列不要使用函数
索引列不要进行计算
索引列上不使用not(!=/<>)
索引列不要使用or(用union来替换)
索引列不要使用包含(like '%keywords%')
c、exists和in的选择
exists先执行主查询
in 先执行子查询