zoukankan      html  css  js  c++  java
  • mysql索引类型(按存储结构划分)

    关于mysql索引类型,网上有很多相关的介绍,给人的感觉很乱。鄙人在翻阅相关书籍后,特意梳理了一下。哪里有不对的地方,欢迎指正!

    1. B-Tree索引

        它使用B-Tree数据结构来存储数据,实际上很多存储引擎使用的是B+Tree。B+Tree和B-Tree的不同点在于:

        (1) 非叶子节点只存储键值信息

        (2) 所有叶子节点之间都有链指针

        (3) 数据记录都存放在叶子节点中

        B-Tree模型:

       

        B+Tree模型:

         

        B-Tree对索引列是顺序组织存储的,很适合查找范围数据。看下B-Tree索引适用哪些查询:

        (1) 全值匹配 

            全值匹配是指查询中使用的条件和索引中的所有列进行匹配。比如有索引 index(last_name, first_name, date) ,查询的条件为:where last_name=? and first_name=? and date=? 。

        (2) 匹配最左前缀

            只使用索引的第一列。比如查询条件为:where last_name = ?

     (3) 匹配列前缀

            只匹配某一列值得开头部分。

        (4) 匹配范围值

        (5) 精确匹配某一列并范围匹配另一列

             比如:where last_name = ? and first_name like kim%

        (6) 只访问索引的查询 

    2. 哈希索引

        哈希索引基于哈希表实现。哈希索引将所有的哈希码存储在索引中,同时在哈希表中保存指向每个数据行的指针。在mysql中,Memory引擎显式支持哈希索引。

        举例说明,有张表:

        CREATE TABLE testhash (

            fname VARCHAR(50) NOT NULL,

       lname VARCHAR(50) NOT NULL,

             KEY USING HASH(fname)

        ) ENGINE=MEMORY; 

        表中有如下数据:

    fname lname
    Arjen Lentz
    Baron Schwartz
    Peter Zaitsev
    Vadim Tkachenko

    假设索引使用假想的哈希函数f(), 如下:

     f('Arjen') = 2323

     f('Baron') = 7437

     f('Peter') = 8784

     f('Vadim') = 2458

    那么哈希索引的数据结构:

    槽(Slot)           值(Value)

    2323                     指向第1行的指针

    2458                     指向第4行的指针

    7437                     指向第2行的指针

    8784                     指向第3行的指针

    如果使用一条sql语句进行查询:select lname from testhash where fname = 'Peter'; 过程为:

    计算‘Peter’的哈希值(f('Peter')=8784)----->查找哈希值对应的指针----->根据指针或得相应的数据。

    哈希索引的特点:索引的结构十分紧凑,因此查找速度非常快;哈希索引数据不是按照索引顺序存储的,无法用于排序;哈希索引不支持部分索引列匹配查找;哈希索引只支持等值比较查询(=,IN(),<=>),不支持范围查询,如where price>100;

    3. 全文索引

        全文索引查找的是文本中的关键词,不是直接比较索引中的值。

    - -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

        

  • 相关阅读:
    apache配置文件参数优化
    apache 虚拟主机详细配置:http.conf配置详解
    Apache安装问题:configure: error: APR not found . Please read the documentation
    lamp安装
    Linux运维常用命令总结
    mysql主从日志的定期清理
    python写的分析mysql binlog日志工具
    mysql5.6主从参数详解
    京东MySQL监控之Zabbix优化、自动化
    CentOS 6.5 生产环境编译安装LNMP
  • 原文地址:https://www.cnblogs.com/lty-fly/p/10691266.html
Copyright © 2011-2022 走看看