数据库存储引擎:
InnoDB:-mysql默认,支持事务,支持外键,支持表锁与行锁
MySIA:支持行锁
Memory: 在内存中存储,因此可存储的大小有限
什么是Index?index是一种用来帮助mysql高效查找数据的数据结构,在数据库之外,数据库维护的满足特定算法的数据结构。
index的优缺点?
优点:
提高数据的检索效率,降低Io成本
* 通过索引列进行排序,降低排序的成本,降低Cpu的消耗
缺点:
index索引需要占用额外空间
虽然index提高了查询效率,但是降低了更新修改的效率
索引类型
B-树索引:所有节点都存放数据
B+树索引:MySQL只有叶子节点存放数据,其他节点仅起到索引数据的作用。且B+树的叶子节点形成了一个单向链表。
Hash索引:MySQL,Hash索引只能用于对等比较(=,in),不支持范围查询(between,>,< ,...),无法利用索引完成排序操作,但是查询效率高
主键索引、唯一.. 、普通索引、全文索引
聚集索引、二级索引
索引失效:
不满足最左前缀法则
使用范围查询<、>右侧缩影失效
索引列运算
字符串不加引号
头部模糊查询
or连接查询时,左侧有索引右侧没有
前缀索引:对长度较长的字符串来说
覆盖索引:避免使用Select *——不需要回表查询,提高查询效率
SQl优化:
插入:
批量插入
手动控制事务,start transaction/begin commit callback
主键顺序插入
主键优化方案
主键顺序插入 如果乱序: 两个概念:页分裂、页合并
order by优化:
mysql的排序方式:
using fileSort:全表扫描后在排序缓冲区sort buffer中排序
Using index:有序索引顺序扫描后直接返回有序数据——操作效率高
limit优化:
存在问题,分页时越往后查询,分页查询的效率越低
解决:覆盖+子查询
slelect * from aa a1,(select id from aa orderby id limit20000,10) a2 where a1.id=a2.id
count优化:
Count(id) Innodb需要一行行的读出然后累计计数
解决:自己计数
count(*)~~count(1)