Java面试题数据库部分合集
发布于:2019-12-11   作者:admin   浏览:488次

Java面试题数据库部分合集

  为什么使用数据索引能提高效率

  数据索引的存储是有序的

  在有序的情况下,通过索引查询一个数据是无需遍历索引记录的

  极端情况下,数据索引的查询效率为二分法查询效率,趋近于log2(N)

  哈希索引的优势:

  等值查询,哈希索引具有绝对优势(前提是:没有大量重复键值,如果大量重复键值时,哈希索引的效率很低,因为存在所谓的哈希碰撞问题。)

  哈希索引不适用的场景:

  不支持范围查询

  不支持索引完成排序

  不支持联合索引的最左前缀匹配规则

  通常,B+树索引结构适用于绝大多数场景,像下面这种场景用哈希索引才更有优势:

  在HEAP表中,如果存储的数据重复度很低(也就是说基数很大),对该列数据以等值查询为主,没有范围查询、没有排序的时候,特别适合采用哈希索引,例如这种SQL:

  #仅等值查询

  select id,name from table where name='李明';

  而常用的InnoDB引擎中默认使用的是B+树索引,它会实时监控表上索引的使用情况。

  如果认为建立哈希索引可以提高查询效率,则自动在内存中的“自适应哈希索引缓冲区”建立哈希索引(在InnoDB中默认开启自适应哈希索引)。

  通过观察搜索模式,MySQL会利用index key的前缀建立哈希索引,如果一个表几乎大部分都在缓冲池中,那么建立一个哈希索引能够加快等值查询。

  注意:在某些工作负载下,通过哈希索引查找带来的性能提升远大于额外的监控索引搜索情况和保持这个哈希表结构所带来的开销。

  但某些时候,在负载高的情况下,自适应哈希索引中添加的read/write锁也会带来竞争,比如高并发的join操作。like操作和%的通配符操作也不适用于自适应哈希索引,可能要关闭自适应哈希索引。