• 技术文章 >数据库 >mysql教程

    mysql有索引吗

    青灯夜游青灯夜游2022-11-08 19:28:36原创297

    mysql有索引。MySQL中通常有两种方式访问数据库表的行数据:1、顺序访问,即在表中实行全表扫描,从头到尾逐行遍历,直到在无序的行数据中找到符合条件的目标数据;2、索引访问,就是通过遍历索引来直接访问表中记录行的方式。MySQL索引的数据结构可以分为BTree和Hash两种,BTree又可分为BTree和B+Tree。

    php入门到就业线上直播课:进入学习

    本教程操作环境:windows7系统、mysql8版本、Dell G3电脑。

    MySQL 索引 是什么?

    索引是一种特殊的数据库结构,由数据表中的一列或多列组合而成,可以用来快速查询数据表中有某一特定值的记录。本节将详细讲解索引的含义、作用和优缺点。

    通过索引,查询数据时不用读完记录的所有信息,而只是查询索引列。否则,数据库系统将读取每条记录的所有信息进行匹配。

    可以把索引比作新华字典的音序表。例如,要查“库”字,如果不使用音序,就需要从字典的 400 页中逐页来找。但是,如果提取拼音出来,构成音序表,就只需要从 10 多页的音序表中直接查找。这样就可以大大节省时间。

    因此,使用索引可以很大程度上提高数据库的查询速度,还有效的提高了数据库系统的性能。

    为什么要使用索引

    索引就是根据表中的一列或若干列按照一定顺序建立的列值与记录行之间的对应关系表,实质上是一张描述索引列的列值与原表中记录行之间一 一对应关系的有序表。

    索引是 MySQL 中十分重要的数据库对象,是数据库性能调优技术的基础,常用于实现数据的快速检索。

    在 MySQL 中,通常有以下两种方式访问数据库表的行数据:

    1) 顺序访问

    顺序访问是在表中实行全表扫描,从头到尾逐行遍历,直到在无序的行数据中找到符合条件的目标数据。

    顺序访问实现比较简单,但是当表中有大量数据的时候,效率非常低下。例如,在几千万条数据中查找少量的数据时,使用顺序访问方式将会遍历所有的数据,花费大量的时间,显然会影响数据库的处理性能。

    2) 索引访问

    索引访问是通过遍历索引来直接访问表中记录行的方式。

    使用这种方式的前提是对表建立一个索引,在列上创建了索引之后,查找数据时可以直接根据该列上的索引找到对应记录行的位置,从而快捷地查找到数据。索引存储了指定列数据值的指针,根据指定的排序顺序对这些指针排序。

    例如,在学生基本信息表 tb_students 中,如果基于 student_id 建立了索引,系统就建立了一张索引列到实际记录的映射表。当用户需要查找 student_id 为 12022 的数据的时候,系统先在 student_id 索引上找到该记录,然后通过映射表直接找到数据行,并且返回该行数据。因为扫描索引的速度一般远远大于扫描实际数据行的速度,所以采用索引的方式可以大大提高数据库的工作效率。

    简而言之,不使用索引,MySQL 就必须从第一条记录开始读完整个表,直到找出相关的行。表越大,查询数据所花费的时间就越多。如果表中查询的列有一个索引,MySQL 就能快速到达一个位置去搜索数据文件,而不必查看所有数据,这样将会节省很大一部分时间。

    MYSQL 索引 的分类

    1、普通索引 和 唯一索引

    2、单列索引 和 组合索引

    3、全文索引

    4、空间索引

    5、前缀索引

    MySQL 索引 的数据结构

     MySQL 索引 的数据结构可以分为 BTree 和 Hash 两种,BTree 又可分为 BTree 和 B+Tree。

    Hash:使用 Hash 表存储数据,Key 存储索引列,Value 存储行记录或行磁盘地址。

     Hash 只支持等值查询(“=”,“IN”,“<=>”),不支持任何范围查询(原因在于 Hash 的每个键之间没有任何的联系),Hash 的查询效率很高,时间复杂度为 O(1)。

    BTree:属于多叉树,又名多路平衡查找树。

    性质:

    1.png

    查询过程,例如:Select * from table where id = 6;

    2.png

    BTree 的不足:

    B+Tree:在 BTree 的基本上,对 BTree 进行了优化:只有叶子节点才会存储 键值 - 数据,非叶子节点只存储 键值 和 子节点 的地址;叶子节点之间使用双向指针进行连接,形成一个双向有序链表。

    3.png

    等值查询,例如:Select * from table where id = 8;

    4.png

    范围查询,例如:Select * from table where id between 8 and 22;

    5.png

    B+Tree 的优点:

    【相关推荐:mysql视频教程

    以上就是mysql有索引吗的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

    千万级数据并发解决方案(理论+实战):点击学习

    Mysql单表千万级数据量的查询优化与性能分析

    Mysql主从原理及其在高并发系统中的应用

    专题推荐:索引 mysql
    上一篇:mysql distinct怎么用 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • ❤️‍🔥共22门课程,总价3725元,会员免费学• ❤️‍🔥接口自动化测试不想写代码?• 聊聊MySQL修改密码的四种方法(小白快看)• MySQL子查询详细教程• 简单聊聊MySQL中join查询• 不要再误解MySQL in的用法了!• MySQL获取时间、格式转换各类操作方法详解
    1/1

    PHP中文网