索引的认识

news2025/1/23 0:51:08

目录

一、索引的介绍

       介绍

       为什么要引入索引:

       索引的使用场景:

二、索引的优缺点

三、索引的类别

1、普通索引

2、唯一索引

3、主键索引

4、组合索引

5、全文索引

四、索引的失效与生效

五、聚集索引和非聚集索引的区别(MYSQL)

一、从物理存储的方式来进行区别的

二、底层数据结构从数据检索来区别:

三、关于聚集索引和非聚集索引的几个问题

一、索引的介绍

       介绍

             索引类似于书本字典的目录;帮助MySQL高效获取数据的数据结构。

       为什么要引入索引:

                ① 提高查询效率,尽量避免全表扫描;
                ② 索引本身也很大,要根据情况添加索引(数据量较少时,添加索引可能比不添加索引更占空间);
                 ③ 索引往往以索引文件的形式存储在磁盘上。

       索引的使用场景:

  1.                 一、应创建索引的场景:
            
                  1、经常使用在where子句上的列;
                          2、经常需要排序的列;
                          3、经常需要根据范围搜索;
                          4、经常用在连接的列:外键
                          5、作为主键的列;
                          6、经常需要搜索的列;
                    二、不应该创建索引的场景:
                          1、很少搜索的列;
                          2、具有很少数据值的列;
                          3、定义为text、image的列,因为这些列数据量相当大;
                         4、对修改性能远大于搜索性能时,因为当增加索引时,会提高搜索性能,但是会降低修改性能;

二、索引的优缺点

        优点:
                1、提高数据的检索效率,降低数据库的IO成本;
                2、通过索引列对数据进行排序,降低数据排序的成本,降低了CPU的消耗。

        缺点:
                1、索引也是一张表,保存了主键和索引字段,指向实体表的记录,所以索引列也要占空间;
                2、索引提高查询速度,但会降低更新速度,原因是更新索引列时,会动态更新索引;
                3、索引只是提高效率的一个因素,大数据量时,需要建立最优秀的索引或者优化查询语句,索引是根据不同业务场景进行调整的。

三、索引的类别

        Mysql主要的索引类型:普通索引、唯一索引、主键索引、组合索引、全文索引

1、普通索引

         是最基本的索引,值可以为空,仅加速查询。
        (1)创建索引:create index index_name on table(column(length));
          (2)   修改表结构的方式添加索引:alter table table_name add index index_name on (column(length));
          (3)   删除索引:drop index index_name on table;

2、唯一索引

        唯一索引与普通索引类似,不同的是:索引列的值必须唯一,允许有空值。如果是组合索引
则列值的组合必须唯一。简单来说:唯一索引是加速查询+列值唯一(可以有null)。
        (1)创建唯一索引:create unique index indexName on table(column(length));
          (2)   修改表结构:alter table table_name add unique indexName on (column(length));

3、主键索引

        主键索引是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值。
        简单来说:主键索引是加速查询+列值唯一(不能有null)+表中只有一个。
        (1)一般是在建表的时候创建主键索引:
                create table mytable(id int not null,username varchar(20) not null,primary key(id));

4、组合索引

        组合索引指在多个字段上创建的索引,查询条件中只有使用了创建索引时的第一个字段,索引才会被使用。注意:使用组合索引时遵循最左前缀集合。组合索引时多列值组成的一个索引,专门用于组合搜索,效率大于索引合并。
        (1)创建索引:alter table tableName add index name_name_age (name,age,city);

5、全文索引

        ①全文索引主要用来查找文本中的关键字,而非直接与索引中的值比较;
        ②目前只有char、vatchar、text列上可以创建全文索引;
        ③数据量大时,先将数据放入没有全局索引的表,然后再用create index创建全文索引优于先为表创建全文索引,然后再写入数据;
        (1)创建表的全文索引:
                CREATE TABLE `table`
                        ( `id` int(11) NOT NULL AUTO_INCREMENT ,
                          `title` char(255) CHARACTER NOT NULL ,
                           `content` text CHARACTER NULL ,
                           `time` int(10) NULL DEFAULT NULL ,
                            PRIMARY KEY (`id`),
                            FULLTEXT (content) );
        (2)修改表结构添加全文索引: alter table article add FULLTEXT index_content(content);
        (3)直接创建索引:create FULLTEXT index_content on article(content);

1.添加PRIMARY KEY(主键索引):ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` )

2.添加UNIQUE(唯一索引):ALTER TABLE `table_name` ADD UNIQUE (`column`)

3.添加INDEX(普通索引):ALTER TABLE `table_name` ADD INDEX index_name ( `column` )

4.添加FULLTEXT(全文索引):ALTER TABLE `table_name` ADD FULLTEXT (`column`)


注意:Mysql的索引结构主要包括:BTree索引,Hash索引,full-text索引,R-Tree索引
           如果么有特别指明,都是指B+树结构的索引;
           InnoDB存储引擎中的B+树索引是由二叉查找树、平衡二叉树和B树这三种数据结构演化过来的。

四、索引的失效与生效

        1、like 模糊查询 前模糊或者 全模糊不走索引;
        2、or 条件中只要有一个字段没有索引,该语句就不走索引;
        3、使用 union all 代替 or 这样的话有索引例的就会走索引;
        4、in 走索引,not in 不走索引;
        5、is null 走索引,is not null  不走索引;
        6、!=、<> 不走索引;
        7、隐式转换-不走索引(name 字段为 string类型,这里123为数值类型,进行了类型转换,所以不走索引,改为 '123' 则走索引);
        8、函数运算-不走索引;
        9、and 语句,多条件字段,最多只能用到一个索引,如果需要,可以建组合索引;
        如果查看执行计划分析是否使用索引?

         PL_SQL(oracle):
         1、使用执行语句:EXPTAIN PLAN EOR 执行sql
         2、接着执行:SELECT * FROM TABLE (DBMS XPLAN.DISPLAY);
                或者直接 选中需要查询的SQL语句,按快捷键 F5 即可查看执行计划。

五、聚集索引和非聚集索引的区别(MYSQL)

一、从物理存储的方式来进行区别的

聚集索引也叫聚簇索引

① 聚集索引和聚簇索引不是一种索引类型,而是物理存储的方式而已;
② InnoDB默认数据结构是聚簇索引,而MyISAM是非聚簇索引;
如图所示:实际上是从物理存储的方式来进行区别的,分别为InnoDB和MyISAM的物理存储

① 聚集索引的物理存储有  表结构   和   表索引+数据 两个文件由于索引和数据聚集在同一文件中,所以称为聚集索引
② 非聚集索引的物理存储有 表结构 和 表数据  和 表索引三个文件;由于索引和数据没有被聚集在同一文件中,所以称为非聚集索引

二、底层数据结构从数据检索来区别:

聚集索引:
① InnoDB的数据文件.frm和数据文件.ibd,其中.ibd中存放的是数据和索引信息是存放在一起的;
② 表的数据行都存放在索引树的叶子节点中;
③ 索引和数据保存在同一个B-Tree中,因此从聚集索引中获取数据通常比在非聚集索引中查找要快。

非聚集索引:
① MyISAM的索引文件.MYI和数据文件.MYD是分开存储的;
② 叶子节点中保存的实际上是指向存放数据块的指针;
③ 非聚集索引需要先查询一遍索引文件,得到索引,根据索引获取数据。

三、关于聚集索引和非聚集索引的几个问题

1、在主键上创建聚集索引的表插入数据为什么比主键上创建非聚集索引表要慢?

        由于有主键唯一性的约束,所以需要保证插入的数据没有重复;
        聚集索引由于索引叶节点就是数据页,所以想检查主键的唯一性,需要遍历所有数据节点才行;但非聚集索引不同,由于非聚集索引上包含了主键值,所以查主键唯一性,只需要遍历所有的索引页就行(索引的存储空间比实际数据更少),这比遍历所有数据行减少了不少IO消耗。

2、在数据库中通过什么描述聚集索引与非聚集索引?

        索引是通过二叉树的形式进行描述的;
        聚集索引和非聚集索引的区别是:
                聚集索引的叶节点就是最终的数据节点;
                非聚集索引的叶节点仍是索引节点,但它有一个指向最终数据的指针。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1211229.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

排查线程阻塞问题

案例代码 package first;import java.util.concurrent.TimeUnit;public class DeadLock {private static volatile Object lock new Object();public static void main(String[] args) {new Thread(() -> {test1();}).start();new Thread(() -> {test2();}).start();}p…

计算机基础知识52

三板斧的使用 HttpResponse: 字符串render: 渲染html页面redirect: 重定向的 # 在视图文件中写视图函数的时候不能没有返回值了&#xff0c;默认返回的是None&#xff0c;页面上就会报错 def render(request, template_name, contextNone, content_typeNone, statusNone, using…

经典文献阅读之--BVMatch(基于鸟瞰图像的点云地点识别方法

0. 简介 由于点云的不规则数据形式以及散点的稀疏性&#xff0c;当前的方法难以从点云中提取高判别性的特征&#xff0c;在大规模环境中使用激光雷达进行全局定位仍是一个难以解决的问题。《BVMatch: Lidar-Based Place Recognition Using Bird’s-Eye View Images》一文中将点…

CSS Form表单布局

效果图 <Tab IsCard"true"><TabItem Text"表单信息-DIV版本"><div class"row"><div class"col"><label for"field1">工程名称:</label><input class"form-control" type&…

江西产业链现代化1269行动计划引领新能源建设与职业教育教学改革的深度融合

江西产业链现代化1269行动计划引领新能源建设与职业教育教学改革的深度融合 在全球能源转型的时代背景下&#xff0c;江西省积极应对挑战&#xff0c;提出了产业链现代化1269行动计划。这一计划不仅着眼于推动新能源建设&#xff0c;还将新能源建设与职业教育教学改革紧密结合…

测试员练就什么本领可以让自己狂揽10个offer

最近&#xff0c;以前的一个小徒弟又双叒叕跳槽了&#xff0c;也记不清他这是第几次跳槽了&#xff0c;不过从他开始做软件测试开始到现在已经有2-3年的工作经验了&#xff0c;从一开始的工资8K到现在的工资17K&#xff0c;不仅经验上积累的很多&#xff0c;财富上也实现了翻倍…

Windows UAC权限详解以及因为权限不对等引发的若干问题分享

目录 1、什么是UAC&#xff1f; 2、微软为什么要设计UAC&#xff1f; 3、标准用户权限与管理员权限 4、程序到底以哪种权限运行&#xff1f;与哪些因素有关&#xff1f; 4.1、给程序设置以管理员权限运行的属性 4.2、当前登录用户的类型 5、案例1 - 无法在企业微信聊天框…

穿越时空的超级英雄

从智能家居到无人驾驶&#xff0c;从虚拟现实到人工智能&#xff0c;云计算无处不在&#xff0c;它让我们的生活更加智能、便捷、有趣&#xff01;在这个奇妙的时代&#xff0c;云计算将成为无所不能的超级英雄&#xff0c;让我们一起穿越时空&#xff0c;探索未来的云计算世界…

JetBrains全家桶_学生免费教程

JetBrains全家桶的费用对于学生来说是一笔不少的费用&#xff0c;但是如果你是学生就可以免费使用 上教程 免费教育许可证 - 社区支持学习或教授如何使用 JetBrains 出品的行业最佳工具编写代码。 JetBrains 工具的免费教育许可证。https://www.jetbrains.com/zh-cn/communit…

婴儿洗衣机哪个牌子比较好?好用的内衣洗衣机推荐

宝宝衣服的清洗对父母来说都很重要&#xff0c;所以挑选一款适合宝宝的小型洗衣机显得尤为重要。也许有许多人认为&#xff0c;为婴儿购买独立的洗衣机是不必要的&#xff0c;但是你是否了解呢&#xff1f;新生婴儿的肌肤要比成人更脆弱&#xff0c;更易受到感染而受到伤害&…

FineReport -问题学习图表设计图表类型-单元格扩展父子格-报表预览

1,问:为什么本地每次预览都要填帐号密码?答:模板认证关闭一下及可 2.单元格扩展与父子格----左父格-扩展方向-箭头往那个方向就往那个方向 1)数据集参数 在定义数据集时,通过使用if函数判断参数的值是否为空,若为空就不过滤参数,若不为空就进行参数过滤。SELECT * FROM…

修改 jar 包中的源码方式

在我们开发的过程中&#xff0c;我们有时候想要修改jar中的代码&#xff0c;方便我们调试或或者作为生产代码打包上线&#xff0c;但是在IDEA中&#xff0c;jar包中的文件都是read-only&#xff08;只读模式&#xff09;。那如何我们才能去修改jar包中的源码呢&#xff1f; 1.…

Edge最新版本,关闭侧边栏,不需命令,更改设置就可

边栏展示 说明&#xff1a;Edge自动更新版本后&#xff08;版本 119.0.2151.58&#xff09;&#xff0c;出现了侧边栏&#xff0c;看着很不舒服&#xff0c;效果如上图 修改&#xff1a; 1、在设置找到侧栏 2、点击Copilot后&#xff0c;展示的页面中会有始终显示边栏这一开…

保护数字前沿:下一代防火墙如何塑造网络安全的未来

下一代防火墙通过提供先进的威胁检测、精细控制和云安全功能&#xff0c;正在重塑网络安全的未来。随着数字环境的不断发展&#xff0c;组织必须采用这些创新解决方案来保护其数字资产并维护安全的数字前沿。 在当今互联的世界中&#xff0c;网络威胁变得越来越复杂&#xff0c…

从3大维度9个细节聊一聊,边缘计算盒子如何选型

人工智能的蓬勃发展&#xff0c;物联网设备的部署和5G无线技术的到来&#xff0c;越来越多的新兴场景对智能化应用提出了低时延、低带宽、本地化、高安全、低成本的处理需求&#xff0c;包括智慧城市、智慧金融、智慧校园等领域&#xff0c;以及智慧交通、智慧工厂、智慧医疗等…

学好Python-新手小白如何做?

新手小白如何学好Python?有哪些参考方法吗?这是一个老生常谈的话题了。今天为大家带来两位前辈的分享&#xff0c;他们给出了非常实用的方法和思路&#xff0c;希望对你有所帮助。 1、多练&#xff0c;两个字&#xff1a;多练 如果真的要说方法可以参考如下&#xff1a; ①…

直流有刷电机调速电路,输出端内置14V钳位结构,具有电源电压范围宽、功耗小、抗干扰能力强等功能的国产芯片GS016的描述

GS016是一款直流有刷电机调速电路&#xff0c;输出端内置14V钳位结构&#xff0c;具 有电源电压范围宽、功耗小、抗干扰能力强等特点。通过桥接内部电阻网 络&#xff0c;可以改变PWM占空比输出&#xff0c;达到控制电机转速作用。GS016采用SOP14的封装形式封装。 主要特点&am…

什么是社会工程学攻击?社会工程学攻击案例,如何防范?

什么是社会工程学攻击&#xff1f; 从广义上讲&#xff0c;社会工程学是操纵人们放弃敏感信息的做法。社交工程学攻击可能当面发生&#xff0c;例如盗匪装扮成送货员闯入建筑物。本文将重点关注社会工程学网络攻击。在大多数情况下&#xff0c;此类攻击旨在使受害者泄露登录凭…

【23真题】厉害,这套竟有150分满分!

今天分享的是23年中国海洋大学946的信号与系统试题及解析。 本套试卷难度分析&#xff1a;22年中国海洋大学946考研真题&#xff0c;我也发布过&#xff0c;若有需要&#xff0c;戳这里自取!平均分为109-120分&#xff0c;最高分为150分满分&#xff01;本套试题内容难度中等&…

反射之Type类

Type类 Type接口是所有类型的父接口&#xff0c;有四个子接口和一个实现类。 Type实现图 Class类比较常见&#xff0c;表示的是原始类型。表示的Java类在JVM里表现为一个Class对象 ParameterizedType表示的是参数化类型&#xff0c;对应 List<T>、List<String> 等格…