文档章节

mysql索引类型(按存储结构划分)

o
 osc_w9s1w4o0
发布于 2019/04/11 17:49
字数 684
阅读 6
收藏 0

精选30+云产品,助力企业轻松上云!>>>

关于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. 全文索引

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

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

 

 

    

 

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
mysql的索引的学习

优秀相关博客地址 1. https://www.cnblogs.com/liqiangchn/p/9060521.html 通俗易懂 一、索引的分类 1:从存储结构上来划分:BTree索引(B-Tree或B+Tree索引),Hash索引,full-index全文索引...

osc_r1i0f044
2019/10/22
1
0
MySQL的分表与分区

MySQL分表分区是解决大数据量导致MySQL性能低下的两种方法。 什么是MySQL分表 从表面意思上看,MySQL分表就是将一个表分成多个表,数据和数据结构都有可能会变。MySQL分表分为垂直分表和水平...

吴伟祥
2019/01/20
44
0
mysql数据库之索引

1 引言   在没有索引的情况下,如果要寻找特定行,数据库可能要遍历整个数据库,使用索引后,数据库可以根据索引找出这一行,极大提高查询效率。本文是对MySQL数据库中索引使用的总结。 2 ...

osc_d47k4c78
2019/01/05
1
0
索引的分类

一、 从物理角度 聚簇索引 非聚簇索引 聚簇索引:将数据存储与索引放到了一块,找到索引也就找到了数据 非聚簇索引:数据存储和索引分开放,索引结构的叶子节点指向了数据的对应行。 二、 从...

RainTa
2018/03/15
28
0
MySQL进阶篇(02):索引体系划分,B-Tree结构说明

本文源码:GitHub·点这里 || GitEE·点这里 一、索引简介 1、基本概念 首先要明确索引是什么:索引是一种数据结构,数据结构是计算机存储、组织数据的方式,是指相互之间存在一种或多种特定...

osc_j5pkc521
06/09
3
0

没有更多内容

加载失败,请刷新页面

加载更多

Hacker News 简讯 2020-07-10

更新时间: 2020-07-10 01:15 US Supreme Court deems half of Oklahoma a Native American Reservation - (reuters.com) 美国最高法院认为俄克拉荷马州的一半是印第安人保留地 得分:131 | 评...

FalconChen
33分钟前
16
0
OSChina 周五乱弹 —— 求求你吃了我吧,不要再玩弄食物的感情了

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @巴拉迪维 :张喆的单曲《陷阱 》 这首歌已经在网易找不到原唱了,不知道被哪家买了版权。#今日歌曲推荐# 《陷阱 》- 张喆 手机党少年们想听歌...

小小编辑
44分钟前
24
1
清华陈文光教授:AI 超算基准测试的最新探索和实践。

道翰天琼认知智能平台为您揭秘新一代人工智能。 无规矩不成方圆。放在超级计算机的研发领域,没有一个大家普遍接受的算力评测指标,便难以推动超算迅猛发展。 而现在伴随着人工智能的发展,大...

jackli2020
59分钟前
7
0
@RequestMapping, consumes 提交简单有意思的测试

getParm @GetMapping("getParm")public Result getParm(String id){ System.out.println(); return ResultFactory.success(id);} 等同于 == bodyParm @PostMapping("bodyParm......

莫库什勒
今天
25
0
63. Unique Paths II

题目: 63. Unique Paths II A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below). The robot can only move either down or right at any p......

JiaMing
今天
55
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部