一站式网站建设用途,微信公众号如何创建视频链接,seo外包资讯,汕头网站建设详细内容索引的底层原理#xff08;三#xff09;哈希索引InnoDB自适应哈希索引哈希索引
memory存储引擎支持的是哈希索引#xff0c;memory是支持内存的存储引擎。
哈希表中的元素没有任何顺序可言#xff0c;只能进行等值比较#xff0c;包括范围搜索、前缀搜索like、order by…
索引的底层原理三哈希索引InnoDB自适应哈希索引哈希索引
memory存储引擎支持的是哈希索引memory是支持内存的存储引擎。
哈希表中的元素没有任何顺序可言只能进行等值比较包括范围搜索、前缀搜索like、order by排序这些操作哈希索引都不适合。
哈希索引无法处理磁盘上的数据加载到内存上构建高效的搜索数据结构。
只适合做等值搜索其他的范围、排序等不合适。
只能是做一些数据不落盘的操作
当被问到是否了解B索引和哈希索引时请把重点先放到B树索引上。 InnoDB自适应哈希索引 对于MySQL5.7一些比较重要的描述 自适应哈希索引系统会进行分区这是因为如果要在一个桶中进行并行的操作那就要对这个桶加锁维护线程安全但是加锁就会阻塞线程如果线程在不同的桶中进行操作那么就不会出现竞态条件也就不用加锁自适应哈希索引总是基于二级索引树B树上的二级索引值来构建的目的是为了加速查找我们可以监控自适应哈希索引的使用根据几个重要的参数信息来判断是否要关掉自适应哈希索引 实际业务中如果出现大量像·“where后面跟着索引字段的等值查询“这样的情况那如果存储引擎依然基于二级索引树进行搜索找到key所对应的主键比如uid然后再到主键索引树中进行搜索找到主键所对应的数据大量这样的回表操作也会降低查询的速度。
所以InnoDB存储引擎设计了针对的优化策略当InnoDB存储引擎监测到同样的二级索引不断被使用进行等值比较那么它会根据这个二级索引在内存上根据二级索引树上的二级索引值在内存上构建一个哈希索引链式哈希表只支持等值查询来加速搜索哈希索引查询的时间复杂度为O(1)其中每个哈希桶上存储的就是数据的地址这样在下一次利用这个二级索引进行等值查询时利用哈希索引就可以直接找到数据地址。
但是需要注意的是自适应哈希索引本身的数据维护也是要耗费性能的并不是说自适应哈希索引在任何情况下都会提升二级索引的查询性能根据参数指标来具体分析是否打开或者关闭自适应哈希索引
show variables like innodb_adaptive_hash_index;默认是开启自适应哈希索引的
查看默认的分区数
show variables like innodb_adaptive_hash_index_parts;可以通过下面的语句看到两个比较重要的信息
show engine Innodb status\GRW-latch等待的线程数量自适应哈希索引默认分配8个分区同一个分区中等待的线程数量过多 走自适应哈希索引搜索的频率低和二级索引树的频率高 情况2就说明实际业务中这样的等值查询是比较少的那维护自适应哈希索引也要耗费很多性能不如就直接进行二级索引
出现以上两种情况最好就把自适应哈希索引关闭掉。