mysql
li418418qq
这个作者很懒,什么都没留下…
展开
-
purge 操作有什么作用
对于上述的delete操作,仅是将主键列等于1的记录delete flag设置为1,记录并没有被删除,即记录还是存在于B+树中。其次,对辅助索引上a等于1,b等于1的记录同样没有做任何处理。而真正删除这行记录的操作其实被“延时”了,最终在purge操作中完成。若该行记录已不被任何其他事务引用,那么就可以进行真正的delete操作。可见,purge操作是清理之前的delete和update操作,将上述操作“最终”完成。而实际执行的操作为delete操作,清理之前行记录的版本。原创 2024-10-10 16:28:24 · 78 阅读 · 0 评论 -
优化器如何优化离散读(MRR)
Multi-Range Read优化的目的就是为了减少磁盘的随机访问,并且将随机访问转化为较为顺序的数据访问,这对于IO-bound类型的SQL查询语句可带来性能极大的提升。MySQL 5.6之前,优化器在进行离散读决策的时候,如果数据量比较大,会选择使用聚集索引,全表扫描。在查询辅助索引时,首先根据得到的查询结果,按照主键进行排序,并按。❑将查询得到的辅助索引键值存放于一个缓存中,这时缓存中的数据是根据辅助索引键值排序的。❑根据RowID的排序顺序来访问实际的数据文件。❑批量处理对键值的查询操作。原创 2024-10-10 16:05:27 · 186 阅读 · 0 评论 -
MySQL如何获取索引所在内存中的数据页
对于缓冲池页内存的哈希表来说,需要分配640×2=1280个槽,但是由于1280不是质数,需要取比1280略大的一个质数,应该是1399,所以在启动时会分配1399个槽的哈希表,用来哈希查询所在缓冲池中的页。InnoDB存储引擎的表空间都有一个space_id,用户所要查询的应该是某个表空间的某个连续16KB的页,即偏移量offset。在哈希函数的除法散列法中,通过取k除以m的余数,将关键字k映射到m个槽的某一个去,即哈希函数为:h(k)=k mod m。哈希表,利用哈希算法。原创 2024-09-11 20:43:03 · 153 阅读 · 0 评论 -
什么是离散读
具体原因在于用户要选取的数据是整行信息,而c1作为辅助索引不能覆盖到我们要查询的信息,因此在对c1索引查询到指定数据后,还需要一次书签访问来查找整行数据的信息。如果要求访问的数据量很小,则优化器还是会选择辅助索引,但是当访问的数据占整个表中数据的蛮大一部分时(一般是20%左右),优化器会选择通过聚集索引来查找数据。在某些情况下,当执行EXPLAIN命令进行SQL语句的分析时,会发现优化器并没有选择索引去查找数据,而是通过扫描聚集索引,也就是直接进行全表的扫描来得到数据。此外,c1 还是一个单独索引。原创 2024-09-11 20:39:25 · 212 阅读 · 0 评论 -
Online DDL
ALGORITHM指定了创建或删除索引的算法,COPY表示按照MySQL 5.1版本之前的工作模式,即创建临时表的方式。需要特别注意的是,由于Online DDL在创建索引完成后再通过重做日志达到数据库的最终一致性,这意味着在索引。这和之前的FIC类似,执行索引创建或删除操作时,对目标表加上一个S锁。对于并发地读事务,依然可以执行,但。执行索引创建或者删除操作时,对目标表不添加任何的锁,即事务仍然可以进行读写操作,不会收到阻塞。还是COPY的算法,该参数的默认值为OFF,表示采用INPLACE的方式。原创 2024-09-11 20:26:50 · 359 阅读 · 0 评论 -
FIC(Fast Index Creation)原理
MySQL 5.5版本之前(不包括5.5)存在的一个普遍被人诟病的问题是:MySQL数据库对于索引的添加或者删除的这类。对于辅助索引的创建,InnoDB存储引擎会对创建索引的表加上一个S锁。由于FIC在索引的创建的过程中对表加上了S锁,因此在创建的过程中只能对该表进行读操作,若有大量的事务需要对。可以发现,若用户对于一张大表进行索引的添加和删除操作,那么这会需要很长的时间。更关键的是,若有大量事务。视图,并将辅助索引的空间标记为可用(不影响附注索引的使用,因为可读,后边的同时删除四个字非常传神),同。原创 2024-09-11 20:19:30 · 108 阅读 · 0 评论