MySQL数据库:索引

这篇具有很好参考价值的文章主要介绍了MySQL数据库:索引。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、索引简介

1.概念

        索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引,并指定索引的类型,各类索引有各自的数据结构实现。

        相当于是给数据库中的数据建立了一个目录,通过目录可以知道数据所在位置,然后到指定位置取出数据即可。

2.作用

        大大提高数据的查询效率。

3.原理

        索引其实就是针对指定字段创建的一个便于查询的数据结构,但是不同的存储引擎有不同的数据结构,本文中后续的示例采用的是MySQL数据库的innodb存储引擎。

innodb存储引擎:采用的索引结构为B+树。

简介B树与B+树的区别:

        B树每个节点都存储了数据,通过索引找到了节点,就直接找到了数据。

        B+树针对索引字段建立数据结构,每个节点中并不存储数据,而是保存数据在磁盘中的地址,数据在磁盘中是连续存储的。

为什么B+树中索引和数据分离存储,索引中存储的是数据的地址?

        在一次磁盘IO中,可以读取更多的索引数据,在检索索引时可以减少IO次数。

二、聚簇索引和非聚簇索引

1. 聚簇索引

(1)通常是针对主键建立主键索引,且一张表中只能有一个主键索引,其他索引都是普通(辅助)索引。

(2)主键索引和数据在磁盘中都是顺序存储的,且索引顺序与数据的实际存储顺序保持一致。

(3)辅助索引是针对主键值做的索引。即辅助索引节点存储的是主键索引字段的值,相当于是先通过辅助索引,找到主键索引值,再通过主键索引值,在主键索引中查找数据存储位置。

2.非聚簇索引

(1)主键索引和普通(辅助)索引没有太大区别,节点中都是保存数据的存储地址。

(2)索引和数据的实际存储顺序不一定保持一致,即数据在磁盘中不一定是按序存储的。

3.区别与联系

联系:聚簇与非聚簇索引都是采用B+树来构建索引。

区别:在构建索引时的思想不同。

4.适用场景

4.1聚簇索引

(1)优点

        索引和数据都是按序存储,因此在范围查询上效率更高,因为查找到一个数据后可以连续取出。

例如:查询某个字段大于5的数据,找到第一个大于5的数据后,就可以直接往后连续取出即可。

(2)缺陷

        ①在中间插入数据时,为了保持顺序存储,需要重新调整索引和数据的存储顺序。

        ②普通索引查询时,需要通过主键索引值在主键索引中进行二次查询。

(3)避免中间插入方法

        因此聚簇索引通常都是针对具有自增属性的主键id创建,这样就可以尽可能的避免中间插入。

4.2非聚簇索引

(1)优点

        ①普通索引查询效果也很好,不需要二次检索索引。

        ②在中间插入和删除数据影响不大,不需要调整数据的存储位置,只需要调整索引即可。

(2)缺陷

        范围查找效率不如聚簇索引:因为数据不一定按序存储,每次都需要通过索引去重新获取下一条数据的存储位置。

5.MySQL数据索引类型

(1)Innodb存储引擎:聚簇索引。

(2)MyISAM存储引擎:非聚簇索引。

三、索引操作

1.查看索引

(1)show keys from 表名;

(2)show index from 表名;

MySQL数据库:索引

(3)desc 表名

MySQL数据库:索引

2.创建索引

2.1自动创建

        MySQL数据库会自动对主键、唯一键、外键字段创建索引。

2.2普通索引创建

(1)在表的定义最后指定某列为索引

create table user(id int primary key, name varchar(10), sex varchar(2), index(name));

MySQL数据库:索引

(2) 创建完表后,指定某列为普通索引

alter table user add index(sex);

MySQL数据库:索引

 (3)为某张表的某个字段创建索引

create index 索引名 on 表名(字段名);

MySQL数据库:索引

 3. 删除索引

(1)删除主键索引

alter table 表名 drop primary key;

(2)删除其他索引

alter table 表名 drop index 索引名;

索引名:show keys from 表名;结果中的Key_name字段。

MySQL数据库:索引

 (3)drop index 索引名 on 表名;

MySQL数据库:索引

四、索引创建原则

1.创建原则

(1)经常作为查询条件的字段适合创建索引。

(2)唯一性差的字段不适合单独创建索引,即使频繁作为查询条件。

(3)更新比较频繁的字段,不适合创建索引。

2.索引不是越多越好

(1)索引会单独建立一张表,占据额外的磁盘空间。

(2)索引可以提高查询效率,但是会增加增删改的时间成本。文章来源地址https://www.toymoban.com/news/detail-415927.html

到了这里,关于MySQL数据库:索引的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【MySql】数据库索引

    可以简单理解为一本书的目录信息,是为了提升查找效率而建立的 1、在创建一个主键、唯一键、外键时候,数据库会自动地针对查找字段设置索引; 2、在创建表时侯,使用 index 进行普通索引的声明 3、修改表结构,给指定的字段添加索引 alter table 表名 add index 索引名

    2024年02月03日
    浏览(65)
  • MySQL数据库索引机制

    MySQL是一款有客户端和服务端的网络应用,mysql是它的客户端,mysqld是它的服务端。服务端本质就是一个进程,它存在于内存当中。而我们存储在MySQL中的数据是保存在磁盘上的,当我们对MySQL中数据进行增删查改操作时,不可能是直接在磁盘上进行操作,而是将对应的数据加

    2024年02月12日
    浏览(78)
  • MySQL数据库唯一索引

    创建索引是指在某个表的一列或多列上建立一个索引,以便提高对表的访问速度。创建索引有3种方式,分别是1.创建表的时候创建索引、2.在已经存在的表上创建索引和使用3.ALTER TABLE语句来创建索引。 本文福利, 莬 费领取Qt开发学习资料包、技术视频,内容包括(C++语言基

    2024年02月08日
    浏览(67)
  • MySQL数据库索引的数据结构

    数据库索引的功能就是让查找更加的高效,所以索引的数据结构应该是能够加速查找的数据结构。 MySQL的innoDB存储引擎的索引的数据结构就是多叉搜索树中的b+树,这可以说是为索引量身定做的一个数据结构。 首先,索引可以通过主键,unique修饰创建,也可以直接使用sql语句

    2024年02月10日
    浏览(59)
  • mysql数据库使用sql对特殊分隔符分隔的字段进行统计

    需求 在一个数据库表中有一个字段中的数据是通过特殊符号进行分隔的,现需要统计分隔符分开的各数据的条数。 数据准备  现需统计各个绝技的人数☺ 思路 使用sql根据逗号将一行数据拆分成多行数据 ,然后使用group by对拆分的数据进行统计。 三种方式,相同的原理 使用

    2023年04月17日
    浏览(102)
  • 简单认识MySQL数据库索引

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 ●索引是一个排序的列表,在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址(类似于C语言的链表通过指针指向数据记录的内存地址)。 ●使用索引后可以不用扫描全表来定位某行的

    2024年02月16日
    浏览(69)
  • 【MySQL数据库 | 第十七篇】索引以及索引结构介绍

    目录 前言: 索引简介:  索引结构:           二叉树索引结构         Tree(普通二叉树)         B-Tree(多路平衡查找树)         B+Tree          哈希索引数据结构 总结: 在实际生活中,我们对SQL语句进行优化实际上有很大一部分都是对索引进行优化,因此对索引

    2024年02月09日
    浏览(76)
  • 【MySql系列】深入解析数据库索引

    MySQL索引是数据库中一个关键的概念,它可以极大地提高查询性能,加快数据检索速度。但是,要充分发挥索引的作用,需要深入理解它们的工作原理和使用方式。 在本文中,我们将深入解析MySQL索引,探讨它们的重要性、类型、创建、维护以及最佳实践。 在数据库中,索引

    2024年02月08日
    浏览(76)
  • 【Mysql系列】——详细剖析数据库“索引”【上篇】

        😎博客昵称:博客小梦 😊最喜欢的座右铭:全神贯注的上吧!!! 😊作者简介:一名热爱C/C++,算法,数据库等技术、喜爱运动、热爱K歌、敢于追梦的小博主! 😘博主小留言:哈喽! 😄各位CSDN的uu们,我是你的博客好友小梦,希望我的文章可以给您带来一定的帮

    2024年02月02日
    浏览(57)
  • MySQL数据库索引的种类、创建、删除

    目录 一:MySQL 索引 1、MySQL 索引介绍 2、 索引的作用  3、索引的副作用 4、 创建索引的原则依据  二、索引的分类和创建 1、 普通索引 (1) 直接创建索引 (2) 修改表方式创建 (3) 创建表的时候指定索引 2、 唯一索引 (1) 直接创建唯一索引 (2) 修改表方式创建

    2024年02月09日
    浏览(212)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包