MySQL 索引是什么?
发布时间:2023-07-05 10:25:37 所属栏目:MySql教程 来源:
导读:索引是一种特殊的数据库结构,由数据表中的一列或多列组合而成,可以用来快速查询数据表中有某一特定值的记录。本节将详细讲解索引的含义、作用和优缺点。
通过索引,查询数据时不用读完记录的所有信息,而只是查
通过索引,查询数据时不用读完记录的所有信息,而只是查
索引是一种特殊的数据库结构,由数据表中的一列或多列组合而成,可以用来快速查询数据表中有某一特定值的记录。本节将详细讲解索引的含义、作用和优缺点。 通过索引,查询数据时不用读完记录的所有信息,而只是查询索引列。否则,数据库系统将读取每条记录的所有信息进行匹配。 可以把索引比作新华字典的音序表。例如,要查“库”字,如果不使用音序,就需要从字典的 400 页中逐页来找。但是,如果提取拼音出来,构成音序表,就只需要从 10 多页的音序表中直接查找。这样就可以大大节省时间。 因此,使用索引可以很大程度上提高数据库的查询速度,还有效的提高了数据库系统的性能。 为什么要使用索引 索引就是根据表中的一列或若干列按照一定顺序建立的列值与记录行之间的对应关系表,实质上是一张描述索引列的列值与原表中记录行之间一 一对应关系的有序表。 索引是 MySQL 中十分重要的数据库对象,是数据库性能调优技术的基础,常用于实现数据的快速检索。 在 MySQL 中,通常有以下两种方式访问数据库表的行数据: 1) 顺序访问 顺序访问是在表中实行全表扫描,从头到尾逐行遍历,直到在无序的行数据中找到符合条件的目标数据。 顺序访问实现比较简单,但是当表中有大量数据的时候,效率非常低下。例如,在几千万条数据中查找少量的数据时,使用顺序访问方式将会遍历所有的数据,花费大量的时间,显然会影响数据库的处理性能。 2) 索引访问 索引访问是通过遍历索引来直接访问表中记录行的方式。 使用这种方式的前提是对表建立一个索引,在列上创建了索引之后,查找数据时可以直接根据该列上的索引找到对应记录行的位置,从而快捷地查找到数据。索引存储了指定列数据值的指针,根据指定的排序顺序对这些指针排序。 简而言之,不使用索引,MySQL 就必须从第一条记录开始读完整个表,直到找出相关的行。表越大,查询数据所花费的时间就越多。如果表中查询的列有一个索引,MySQL 就能快速到达一个位置去搜索数据文件,而不必查看所有数据,这样将会节省很大一部分时间。 MYSQL 索引 的分类 1、普通索引 和 唯一索引 普通索引:MySQL 中的基本索引类型,允许在定义索引的列中插入 重复值 和 空值 唯一索引:要求索引列的值必须 唯一,但允许 有空值 如果是组合索引,则列值的组合必须 唯一 主键索引是一种特殊的唯一索引,不允许 有空值 2、单列索引 和 组合索引 单列索引:一个索引只包含单个列,一个表可以有多个单列索引 组合索引:在表的 多个字段 组合上 创建的 索引 只有在查询条件中使用了这些字段的 左边字段 时,索引才会被使用(最左前缀原则) 3、全文索引 全文索引 的类型为 fulltext 在定义索引的 列上 支持值的全文查找,允许在这些索引列中插入 重复值 和 空值 全文索引 可以在 char、varchar 和 text 类型的 列 上创建 4、空间索引 空间索引 是对 空间数据类型 的字段 建立的索引 MySQL中的空间数据类型有4种,分别是 Geometry、Point、Linestring 和 Polygon MySQL 使用 Spatial 关键字进行扩展,使得能够用创建正规索引类似的语法创建空间索引 创建空间索引的列,不允许为空值,且只能在 MyISAM 的表中创建。 5、前缀索引 在 char、varchar 和 text 类型的 列 上创建索引时,可以指定索引 列的长度 MySQL 索引 的数据结构 MySQL 索引 的数据结构可以分为 BTree 和 Hash 两种,BTree 又可分为 BTree 和 B+Tree。 Hash:使用 Hash 表存储数据,Key 存储索引列,Value 存储行记录或行磁盘地址。 Hash 只支持等值查询(“=”,“IN”,“<=>”),不支持任何范围查询(原因在于 Hash 的每个键之间没有任何的联系),Hash 的查询效率很高,时间复杂度为 O(1)。 BTree:属于多叉树,又名多路平衡查找树。 性质: BTree 的节点存储多个元素( 键值 - 数据 / 子节点 的地址) BTree 节点的键值按 非降序 排列 BTree 所有叶子节点都位于同一层(具有相同的深度) (编辑:汽车网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐