zoukankan      html  css  js  c++  java
  • 关于数据库索引

    1.索引其实是一种数据结构,能够帮助我们快速的检索数据库中的数据。

    常见的MySQL主要有两种结构:Hash索引和B+ Tree索引,我们使用的是InnoDB引擎,默认的是B+树

    B+ Tree索引和Hash索引区别 哈希索引适合等值查询,但是不无法进行范围查询 哈希索引没办法利用索引完成排序 哈希索引不支持多列联合索引的最左匹配规则 如果有大量重复键值得情况下,哈希索引的效率会很低,因为存在哈希碰撞问题。

    关于聚族索引和非聚族索引:在InnoDB里面,索引B+ Tree的叶子节点存储了整行数据的是主键索引,也被称之为聚簇索引。

      而索引B+ Tree的叶子节点存储了主键的值的是非主键索引,也被称之为非聚簇索引。

    所以聚族索引查询的更快一点,因为主键索引树的叶子节点直接就是我们要查的整行数据。

    而非聚族索引的叶子节点是主键的值,查到主键的值以后,还要再通过主键的值再进行查询一次,这个过程叫回表

    联合索引、最左前缀匹配

    1.查询概率比较高,经常作为where条件的字段设置索引

    2.根据业务需求,where子句中使用最频繁的一列放在最左边,因为MySQL索引查询会遵循最左前缀匹配的原则,即最左优先,在检索数据时从联合索引的最左边开始匹配。所以当我们创建一个联合索引的时候,如(key1,key2,key3),相当于创建了(key1)、(key1,key2)和(key1,key2,key3)三个索引,这就是最左匹配原则。

    3.MySQL 5.6中,对索引做了哪些优化?

      有一个比较重要的 :Index Condition Pushdown Optimization(索引下推)

       MySQL 5.6引入了索引下推优化,默认开启,使用SET optimizer_switch = 'index_condition_pushdown=off';可以将其关闭

    例如:

    SELECT * FROM people WHERE zipcode='95054' AND lastname LIKE '%etrunia%' AND address LIKE '%Main Street%';

    如果没有使用索引下推技术,则MySQL会通过zipcode='95054'从存储引擎中查询对应的数据,返回到MySQL服务端,然后MySQL服务端基于lastname LIKE '%etrunia%'和address LIKE '%Main Street%'来判断数据是否符合条件。 如果使用了索引下推技术,则MYSQL首先会返回符合zipcode='95054'的索引,然后根据lastname LIKE '%etrunia%'和address LIKE '%Main Street%'来判断索引是否符合条件。如果符合条件,则根据该索引来定位对应的数据,如果不符合,则直接reject掉。 有了索引下推优化,可以在有like条件查询的情况下,减少回表次数。





  • 相关阅读:
    课堂练习02
    第五周进度条
    软件工程个人作业03
    第四周进度条
    构建之法阅读笔记02
    ---JS canvas学习笔记
    JavaScript 对象、DOM对象、jquery对象的区别、转换详解
    JQM---列车时刻查询
    JS---如何避免用户在请求时“猛击”
    HTML5 新增属性和废除属性
  • 原文地址:https://www.cnblogs.com/auldlangsynezh/p/11158983.html
Copyright © 2011-2022 走看看