争取第一个内存块:
instance(实例)的作用:
instance的作用: 参考阿里一般设置为16或32
instance 的数量应该参考CPU数量 在单CPU的情况下,并发就会很少。 instance代表的是同时有多少个人能一块干活
innodb buffer pool 怎么存数据:
**LRU污染:**对于一个经常不读的表,某一天突然读取,它会从磁盘中读取出来,然后放在热端,这样就会导致我经常读取的数据滞后,当我再正常读取我经常读取的数据时,就会造成大量的IO,这就是LRU污染,造成数据库飙升。
**对LRU的优化:**添加了midpoint,第一次读取的数据会先放在midpoint位置,当再读取时,我会觉得你是真的使用它,再把它放在热端。
sql语句的排序不是在innodb buffer pool 中做的。
当一个用户连接的时候,mysql db会给它创建一个线程,除此之外,一个用户还会给它创建很多内存区域,这些内存区域就是这些用户私密的小空间。内存缓存做后面的事。
如果有排序,会多一步,会多分出一个缓存,先将数据无排序的从硬盘中调取到innodb buffer pool,然后有要求排序的时候,直接从innodb buffer pool放到每个用户私密的空间sort buffer进行排序,排完之后才能真正的返回给用户。
对select做一个总结: 首先用户进程连上来,我要先看看innodb buffer pool 中有没有我要的数据,如果有我就直接从内存拿了,如果没有我就只能磁盘IO了,磁盘IO不是直接会给用户,而是给innodb buffer pool(我为人人,人人为我,只要有人和我差不多的读取数据,我就可以直接从内存中读取数据了)
我有一个表,这个表有一千万行,里面有一列,这一列是男和女,当这个时候我where sex =“男”,即要找出2500万的行数
**全表扫面怎么做:**这个表是有很多个数据页组成,我一次最少也要读一页,实际上我可以多个数据页多个数据页的往里面读
一个数据页的读:
**实际多个数据页:**把这些数据放在内存里做过滤,找出我想要的
索引: .ibd中存有数据和索引,数据是按照主键索引放的
考量索引的性能就是按照树高(深度)来考量的。
索引读取方式:
假如索引是这种结构的,索引我每读一行,都要有3次IO
以上是mysql的查询在数据库中怎么流转的。
以下写更新修改的。
内存中修改的是脏数据(灰数据)。



