mysql优化学习笔记1

1.架构内容

myISAM,InnoDB常用的两种数据引擎,

设计架构:连接层,服务层,引擎层,数据层

数据库引擎对比:

对象项目 myisam innodb
主外键 不支持 支持

事物

表锁,即使操作一条记录也会锁住整个表,不适合高并发的操作 行锁,操作室只锁住一行,不对其他行有影响,适合高并发的操作
缓存 只缓存引擎,不缓存真实数据 不仅缓存索引还缓存真实数据,对内存要求较高,而且内存大小对性能决定性的影响
表空间
关注点 性能 事物
     

2.优化分析:

分析角度:性能下降sql慢,执行时间长,等待时间长(查询语句写得烂,索引失效,关联查询太多join,服务器调优及参数设置(缓冲,线程数等))

 

常用的join查询,索引简介,性能分析,性能优化

索引:排好序的快速查找数据结构

除数据外,数据库系统还维护着满足特定查找算法的数据结构

平常所说的索引,如果没有特别指明,都是指B树(多路搜索树,不一定为二叉树)结构组织的序列。其中聚集索引,次要索引,复合索引,前缀索引,唯一索引默认都是b+树,统称索引。当然b+树这种类型的索引之外,还有哈希索引(hash-index)等

mysql索引分类:单值索引,唯一索引,复合索引,

单值索引:即一个索引包含单个列,一个表有多个单列索引

唯一索引:索引列的值必须唯一,但允许有空值

复合索引: 即一个索引包含多个列

mysql索引结构:btree索引,hash索引,full-text索引,r-tree索引

3.那些情况下需要建立索引

3.1自动主键建立唯一索引

3.2频繁作为查询条件的字段应该创建索引

3.3查询中与其他表关联的字段,外键关系建立索引

3.4频繁更新的字段不适合建立索引,因为每次更新不单单是更新了记录还会更新索引

3.5where条件里用不到的字段不创建索引

3.6单键/组合索引的选择问题,who?(高并发下倾向创建组合索引)

3.7查询中排序的字段,排序字段若通过索引去访问将大大提高排序速度

3.8查询中统计或者分组字段

4.那些情况下不建议建立索引

4.1表记录太少

4.2经常增删改的表

4.3数据列重复内容太多,建立索引没有意义

5.mysql常见瓶颈

5.1cpu饱和一般发生在数据装入内存或者从磁盘读取数据的时候

5.2IO瓶颈发汗个在装入数据远大于内存容量的时候

5.3服务器硬件的性能瓶颈,top,free,iostat,vmstat来查看系统的性能状态

6.type显示的是访问类型,是较为重要的一个指标,结果值从最好到最坏依次是

system>const>eq_ref>ref>range>index>ALL

保证查询至少达到range级别,最好能达到ref

查询中若使用了覆盖索引,则该索引仅出现在key列表中

未完待续.....

 

posted @ 2020-04-29 20:00  我爱黑科技77  阅读(128)  评论(0编辑  收藏  举报