mysql (二)

来源:互联网 发布:数据分析功能 编辑:程序博客网 时间:2024/05/21 08:06

4. 范式

4.1 三范式

1 范式:字段设计原子型,不能分割

2 范式:字段与主键id关联

3 范式:字段 与主键id直接关联

4.2 逆范式

不遵守三范式,称为”逆范式“,在分类表中记录对应商品的数目,方便后期查询

5. 索引

主键索引(primary key)

索引是进行数据库设计的时候,提升性能最有效的一个技术,索引字段对应记录的物理地址;从技术本身的角度看索引,索引就是一种数据结构,内部有算法,可以帮助我们快速,准确定位需要的信息。

5.1 索引创建

数据表的全部字段都可以创建索引

索引类型:

1)主键索引 primary key

2)唯一索引 unique key

3)普通索引              key

4)全文索引 fulltext key(把一个文章的内存都给创建索引。mysql5.6.4之前只有Myisam支持全文索引,之后Myisam和Innodb都支持)

5)复合索引

5.1.2 创建数据表同时设置索引



5.1.3  给存在的数据表增加索引


5.2 删除索引

注意:”删除主键索引,必须先去除auto_increment属性

5.3  执行计划explain

执行计划:一条sql语句在没有执行之前,先把需要的资源都计划好,例如CPU,内存等资源的分配预计,该形成的就称为”执行计划“

我们就只研究一条sql语句是否是使用到”索引“

1)使用到索引,耗费资源少,查询速度快

2)没有使用索引,耗费资源多,查询速度慢

通俗说,只有关联到索引的sql语句,才是优化的sql语句

目前,只有”查询sql“语句支持做执行计划


没有使用索引


5.3 索引适合场合

注意: 有的字段重复内存很多(性别字段),则不要设置索引,不会起作用

1)where 条件后边的字段都可以设置索引

2)排序字段适合做索引

3)索引覆盖

做数据查询,查询的字段就是索引的内容

这样索引本身就支持数据的提供,其已经不获得具体其他字段信息

数据查询只通过索引内存就获得需要的信息,就称为”索引覆盖“

4)连接查询

   select  from 表1  join  表2  on  1.字段=表2.字段

   上边sql语句的表1.字段 也称为“外键字段”

    外键字段也适合做索引。

5.4 索引原则

1)字段独立原则

    select * from emp  where empno=1345629; //字段独立,可以使用索引

    select * from emp  where empno+2=1345629;  //字段不独立(不能使用索引)


2) 左原则

 

注意:数字内部不要使用like(没有索引可用)

 

模糊查询的时候,有可能用到索引,也有可能不能使用索引
例如:

select * from emp  where  ename like “%内容%”;

select * from emp  where  ename like “tom_”;  //tomatomb、tomtt

%符号:代表对应位置出现1或多个其他内容

_符号:代表对应位置出现1个其他内容

 

模糊查询左边内容固定的时候可以用到索引,否则不能使用

select * from emp  where  ename like “内容%”;  //能用索引

select * from emp  where  ename like “%内容%”; //不能用索引

select * from emp  where  ename like “内容__”;  //能用索引

select * from emp  where  ename like “_内容__”; //不能用索引

3) 复合索引

复合索引的第一个字段,单独作为条件可以使用到该索引,第二字段单独作为条件不能成为索引,两个字段作为条件也可以成为索引

4)or 原则

两边都有索引,则会全部都分别使用

一个有索引,另一个没有索引,导致结果后没得使用索引

总结:

1. 逆范式

    不要太遵守三范式,称为“逆范式”

    在分类表中记录对应商品的数目,方便后期查询

 

    三范式:

    1范式:字段设计原子型,不能分割

    2范式:字段与主键id关联

    3范式:字段与主键id直接关联

2. 索引

    索引就是数据结构,数据结构里边有算法

    创建索引:创建表同时设置、后期给已经存在数据表设置

    删除索引:

       删除主键索引,先取出主键的auto_increment属性

       alter table  表名 drop  primary key;

       alter table  表名 drop  key 索引名称;

   

    执行计划:explain

       分析sql语句是否使用到索引

       只针对select查询语句起作用

 

    索引使用场合:

    ① where后边字段

    ② order by 排序

    ③ 索引覆盖

    ④ 连表查询 (外键设置索引)

 

    索引原则

    ① 字段独立

    ② 左原则(模糊查询时)

    ③ 复合索引

    ④ or原则


原创粉丝点击