mysql 优化

多个层面思考,优化性能
存储层:存储引擎、字段类型选择、范式设计
设计层:索引、缓存、分区(分表)
架构层:多个mysql服务器设置,读写分离(主从模式)
sql语句层:多个sql语句都可以达到目的的情况下,要选择性能高、速度快的sql语句
show engine/G; 显示数据库的使用引擎

1.存储引擎: Myisam 和 innoDb
innodb:

数据库每个数据表的数据设计三方面信息:表结构、数据、索引

技术特点:支持事务、行级锁定、外键

并发性

该类型表的并发性非常高

多人同时操作该数据表

为了操作数据表的时候,数据内容不会随便发生变化,

要对信息进行“锁定” 该类型锁定级别为:行锁。

只锁定被操作的当前记录。

Myisam:

结构、数据、索引独立存储

技术特点:表级锁定、读写效率高

并发性

该类型并发性较低

该类型的锁定级别为:表锁

 

网站大多数情况下“读和写”操作非常多,适合选择Myisam类型

网站对业务逻辑有一定要求(办公网站、商城)适合选择innodb

 

2.字段类型选择

2.1 尽量少的占据存储空间

int(3) 表示可以存放3个长度 如123 如果插入1234 侧会显示长度超出显示

 

 

 设置name长度为32

CHAR、VARCAHR的长度是指字符的长度

TINYINT、SMALLINT、MEDIUMINT、INT和BIGINT的长度,其实和数据的大小无关!Length指的是显示宽度

例如 int(3)可以存放10亿

 

一个字节 等于8个位 位就是存储0和1数值

1B=8b;

1k =1024B;

int(3)可以存放1000000000

长度 M 与你存放的数值型的数的大小无关

 

3.表优化:设计符合三范式,

① 一范式:原子性,数据不可以再分割

② 二范式:数据没有冗余

③ 三范式 数据表每个字段与当前表的主键产生直接关联(非间接关联)

 

4.索引优化

有了索引,我们根据索引为条件进行数据查询速度就非常快

① 索引本身有”算法”支持,可以快速定位我们要找到的关键字(字段)

② 索引字段与物理地址有直接对应,帮助我们快速定位要找到的信息

 

索引类型

四种类型:

① 主键 primary key auto_increment必须给主键索引设置 信息内容要求不能为null,唯一

② 唯一 unique index 信息内容不能重复

③ 普通 index 没有具体要求

④ 全文 fulltext index myisam数据表可以设置该索引

复合索引:索引关联的字段是多个组成的,该索引就是复合索引。

 

执行explain

explain 查询sql语句\G;

索引适合场景:

1) where查询条件

where 之后设置的查询条件字段都适合做索引。

2) 排序查询 order by 字段 //排序字段适合做索引

排序字段没有索引,做排序查询就没有使用:

3) 连接查询(约束字段)

4) OR左右的关联条件必须都具备索引 才可以使用索引:

5)左原则

模糊查询,like % _

%:关联多个模糊内容

_: 关联一个模糊内容

select * from 表名 like “beijing%”; //使用索引 select * from 表名 like “beijing_”;//索引索引

查询条件信息在左边出现,就给使用索引 XXX% YYY_ 使用索引

%AAA% _ABC_ %UUU 不使用索引

索引失效的原因

1.where 字段 or where 字段 字段前后两个字段都需要加索引 ,如果其中使用一个,索引都失效

2.最左原则 如  %name  还有 %name% 等都会是name索引失效 name%有用

3 字段进行自运算 age=age+2 是age索引失效 还有sum、count 等聚合函数会使字段索引失效 

 

 

posted on 2020-12-14 11:23  kevin_yang123  阅读(80)  评论(0编辑  收藏  举报