引言
解答了一些自己现阶段一些疑惑,比如mysql如果优化,这个索引为啥能这么快呢,为什么加索引后数据的更新和插入会变慢呢。
查询执行流程
1、缓存中存储着那些数据?请求结束时,会清除缓存。(只当一个了解) 2、查询缓存诠释。
索引(innoDB)
索引使用“Btree(平衡多路查找树)”,单个节点是由 “索引值(索引值1,索引值2…)+数据”构成。索引值可以知道当前节点的数据和下个节点,这样可以理解为每个索引都是一颗树。
1、占用空间多。比如,一个索引对应一个10B的索引值,一页容量是1000B,数据项大小为10B,那么一页可以存储1000/(10+10)= 50个 节点;那么有9个索引,可以存储1000/(10*9+10)=10个节点。 2、插入或更新数据时会速度会变慢。根据“BTree”的特性,每次插入或更新时,需要达到每棵树的平衡,需要对树进行旋转操作(重新计算索引值)。
优化慢查询
结合之前所看帖的经验,总结一点就是尽量使索引有效(因为一些业务需求+表结构的问题,使索引失效了)。那我们所需要做的就是如何避免索引失效、查询时尽量使用索引、拆分联表查询。以下运算会使索引失效。
- not in 会使索引失效。
- 范围查找会使索引失效(大于、小于、大于等于、小于等于、between and ,!= )。
- or
小记
这本书呢,从很多角度方面去优化msql的性能,从数据类型、索引、缓存、服务器配置信息等方面,分得很细,这次大致看到了第8章,很多时候就只是看了,看得过程比较枯燥,对于自己现在来说是用不上,就看不下去了。
|