数据库优化

数据库优化

分层架构:(自上而下)

链接层:提供和客户端链接的服务,拿到客户的请求,但不处理

服务层:

a、提供各种用户处理的接口

b、提供sql优化器(你所写的sql不一定会执行)

引擎层:

常见的两个innodb(事物优先,提供行锁适合高并发操作)myisam(性能优先,表锁)

存储层:最终的数据存储位置

查询数据库引擎:支持哪些引擎?

# show engines;    结尾符号可以用/g

# show variables like ' %storage_engine% ' ;

ENGINE 指定引擎

AUTO_INCREMENT 指定步长

SQL优化

原因: 性能低,执行时间长,语句欠佳(连接查询等),索引失效,以及服务器参数设置不合理(比如缓冲区大小和线程数等)

a.SQL :

编写过程:

Select from join on where group by having order by limit

解析过程:

from on join where group by having select dinstinct order by limit

你写的语句并非解析顺序

详细了解:cnblogs.com/annsshadow/p/5037667.html

优化sql,重在优化索引

索引:相当于目录的存在,数据库关键字 index,官宣:帮助mysql获得高效数据的数据结构

一般来说,索引是一棵树(树:二叉树,B树,hash树… )

劣势:

索引适应查,但不适应增删改,后者会损耗性能

索引是单独的另一个文件,文件本身很大,会占用很多空间

优势:

高效查询,降低io使用率

降低cpu使用率,例:有索引表的排序

三层B树可以存放百万条数据,B树分很多,一般用B+树,不管找什么数据都需要n次,即树的高度

索引分类:

主键索引:

一个表只有一个,不能为空,一个表有主键,默认主键索引创建

单值索引:index

一个表可以有多个,可以为空

唯一索引:  unique index

不能重复

复合索引:  index      ……      表(在前的先查,之后的后查)

多个列构成,相当于二级目录,不会百分百所有的列全中

创建索引:

# create 索引类型 索引名字 on 表 (字段)

# alter  table  表名  索引类型  索引名字(字段)

括号中有多个字段,谁在前先命中谁,接着命中后边的,命名要求,字段通过下划线隔开尾部追加index

删除索引:drop index 索引名字 on  表名

查看索引:show index from 表名

sql性能问题:

执行计划

优化器干扰

你可能感兴趣的:(数据库优化)