MySQL进阶学习笔记三(包括视图、索引、数据库优化)

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 先执行子查询

最新回复(0)
/jishu_2F1EzHjgJCbbSbRWyX2njlxNc4teUzh4N3B361cixqdA_3D4672576
8 简首页