innodb_lru_scan_depth
全部标签前言相信有很多同学和我一样,第一次碰到LRU(LeastRecentlyUsed)的这个解释「最近最少使用」都不知道是什么意思,用汤家凤老师的话来说:我真的感到匪夷所思啊!最近是表示时间,最少是表示频度,拆开来都知道,但是合在一起就不知道是什么意思了。经过一番搜索后,我发现这可能是国内一些专业名词的通病:翻译问题。甚至百度百科对LRU的解释也是这样:LRU是LeastRecentlyUsed的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间t,当须淘汰一个页面时,选择现有页面中其t值最
1.获取指定前缀的key需求描述:Redis中有大量以xxx开头的key,在不使用keys命令的情况下,如何快速获取这些前缀的key解决方案:redis自带的scan命令可以解决这个问题2.SCAN命令SCAN是一个基于游标的迭代器。这意味着在每次调用该命令时,服务器都会返回一个更新后的游标,用户需要在下一次调用中使用它作为游标参数。当游标设置为0时开始迭代,当服务器返回的游标为0时终止迭代。从游标值为0开始迭代,并调用SCAN直到返回的游标再次为0,这称为完整迭代。时间复杂度:每次调用O(1)。O(N)用于完整的迭代,包括足够的命令调用以使光标返回0。N是集合内的元素数。和scan命令相关的
1.获取指定前缀的key需求描述:Redis中有大量以xxx开头的key,在不使用keys命令的情况下,如何快速获取这些前缀的key解决方案:redis自带的scan命令可以解决这个问题2.SCAN命令SCAN是一个基于游标的迭代器。这意味着在每次调用该命令时,服务器都会返回一个更新后的游标,用户需要在下一次调用中使用它作为游标参数。当游标设置为0时开始迭代,当服务器返回的游标为0时终止迭代。从游标值为0开始迭代,并调用SCAN直到返回的游标再次为0,这称为完整迭代。时间复杂度:每次调用O(1)。O(N)用于完整的迭代,包括足够的命令调用以使光标返回0。N是集合内的元素数。和scan命令相关的
之前了解过postgresql的Bitmapscan,只是粗略地了解到是通过标记数据页面来实现数据检索的,执行计划中的的Bitmapscan一些细节并不十分清楚。这里借助一个执行计划来分析bitmapscan以及indexonlyscan,以及两者的一些区别。这里有关于Bitmapscan的一些实现过程,https://dba.stackexchange.com/questions/119386/understanding-bitmap-heap-scan-and-bitmap-index-scan0.构建测试环境PG版本为11,如下测试脚本,构建一个简单的测试表createtablemy_t
之前了解过postgresql的Bitmapscan,只是粗略地了解到是通过标记数据页面来实现数据检索的,执行计划中的的Bitmapscan一些细节并不十分清楚。这里借助一个执行计划来分析bitmapscan以及indexonlyscan,以及两者的一些区别。这里有关于Bitmapscan的一些实现过程,https://dba.stackexchange.com/questions/119386/understanding-bitmap-heap-scan-and-bitmap-index-scan0.构建测试环境PG版本为11,如下测试脚本,构建一个简单的测试表createtablemy_t
MyISAMInnoDB事务X√行锁X√外键X√全文搜索√X表空间的大小较小较大,约为MyISAM的2倍MyISAMMyISAM是MySQL5.5版本之前的默认引擎,支持全文检索、压缩、空间函数等,但是不支持事务和行级锁,所以一般用于有大量查询少量插入的场景来使用。而且MyISAM不支持外键,索引和数据是分开存储的。InnoDBInnoDB是MySQL5.5版本之后的默认引擎,基于聚簇索引建立的,支持事务、外键、行级锁,并且通过MVCC来支持高并发,索引和数据存储在一起。如何选择如果需要事务,选择InnoDB,不需要则选择MyISAM。如果大部分表操作都是查询,选择MyISAM,有写又有读选I
MyISAMInnoDB事务X√行锁X√外键X√全文搜索√X表空间的大小较小较大,约为MyISAM的2倍MyISAMMyISAM是MySQL5.5版本之前的默认引擎,支持全文检索、压缩、空间函数等,但是不支持事务和行级锁,所以一般用于有大量查询少量插入的场景来使用。而且MyISAM不支持外键,索引和数据是分开存储的。InnoDBInnoDB是MySQL5.5版本之后的默认引擎,基于聚簇索引建立的,支持事务、外键、行级锁,并且通过MVCC来支持高并发,索引和数据存储在一起。如何选择如果需要事务,选择InnoDB,不需要则选择MyISAM。如果大部分表操作都是查询,选择MyISAM,有写又有读选I
MySQL默认数据库引擎事务支持索引类型索引数据结构对锁的支持使用场景关于count(*)外键支持InnoDB5.1版本后,是默认为Readcommitted聚集索引,叶子节点直接存储数据,写快读慢;非主键索引先查询主键,数据和主键存储在一起,没有主键时使用第一非空的唯一索引(NOTNULLandUNIQUEINDEX),也没有的话使用6字节的自增数值作为聚簇索引B+树行锁和表锁支持事务,写多读少需要扫描数据查询支持MyISAM5.1版本后,否不支持非聚集索引,叶子节点存储主键信息,写慢读快;非主键索引直接查询数据,数据单独存储B+树表锁不需要支持事务,读多写少存储直接输出,注意如果查询含w
MySQL默认数据库引擎事务支持索引类型索引数据结构对锁的支持使用场景关于count(*)外键支持InnoDB5.1版本后,是默认为Readcommitted聚集索引,叶子节点直接存储数据,写快读慢;非主键索引先查询主键,数据和主键存储在一起,没有主键时使用第一非空的唯一索引(NOTNULLandUNIQUEINDEX),也没有的话使用6字节的自增数值作为聚簇索引B+树行锁和表锁支持事务,写多读少需要扫描数据查询支持MyISAM5.1版本后,否不支持非聚集索引,叶子节点存储主键信息,写慢读快;非主键索引直接查询数据,数据单独存储B+树表锁不需要支持事务,读多写少存储直接输出,注意如果查询含w
数据库与I/O原理数据会持久化到磁盘,查询数据是就会有I/O操作,相对于缓存操作,I/O操作的时间成本相当高昂。I/O操作的基本单位是一个磁盘页面,比如16KB的页面大小。当数据量比较大时,单表数据就会分布在多个磁盘页面。如果没有索引,就必须按顺序加载磁盘页面到缓存进行查找,判断数据是否存在。随着数据量的增长,磁盘I/O操作的次数也会越来越多。因此,有必要通过一些辅助的数据结构来提交检索的速度。从上面可以看出,想要快速读取到数据,可从以下几个方面着手1.如何尽量减少磁盘IO操作2.如何快速定位到数据所在的磁盘页面3.如何快速定位数据在磁盘页面内的位置 数据库索引是什么索引是存储引擎用于快速查