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列表中
未完待续.....