数据库优化
分层架构:(自上而下)
链接层:提供和客户端链接的服务,拿到客户的请求,但不处理
服务层:
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性能问题:
执行计划
优化器干扰
网友评论