索引的认识

目录

一、索引的介绍

       介绍

       为什么要引入索引:

       索引的使用场景:

二、索引的优缺点

三、索引的类别

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.hqwc.cn/news/177450.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux 不同用户不同jdk

0、 解压一个新版本的jdk 1、 检查root用户下的环境变量&#xff0c;是否配置了JAVA_HOME&#xff0c;基于这个变量再配置的PATH变量是实现切换的前提。 2、 创建新用户 adduser jdk11 passwd jfjfjfjfjfjfj123 3、 编辑改用下的 .bashrc 文件 执行命令进行编辑&#xff0…

【AI】将Python项目打包成Docker镜像的小实践

1.准备工作 可以本地运行的Python程序 这个因人而异&#xff0c;可以是Anaconda环境&#xff0c;也可以是本机运行的Python环境&#xff0c;确保python程序是可以正常运行的。Docker环境 Docker环境是打包镜像必需的&#xff0c;可以安装Docker Desktop for Windows&#xff0…

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

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

win10关闭讲述人、粘滞键功能的快捷键启动

简单记录下在win10关闭讲述人、粘滞键快速启动的快捷键&#xff0c;这两个功能对正常人没什么用。误触发很烦。 禁用讲述人 按windows键&#xff0c;输入“轻松使用设置”&#xff0c;点“讲述人”&#xff0c;如下图取消讲述人开关和快捷键的勾选。 禁用粘滞键 按windows…

使用Pandas进行数据读写的简易教程

Pandas是一个功能强大且广泛使用的Python库。它提供了一种简单而灵活的方式来读取和写入各种数据格式&#xff0c;包括CSV、Excel、SQL数据库等。本文将介绍如何使用Pandas进行数据的读取和写入操作&#xff0c;帮助你快速上手并高效地处理数据。 一、安装和导入pandas 首先&…

HarmonyOS 高级特性

引言 本章将探讨 HarmonyOS 的高级特性&#xff0c;包括分布式能力、安全机制和性能优化。这些特性可以帮助你构建更强大、更安全、更高效的应用。 目录 HarmonyOS 的分布式能力HarmonyOS 的安全机制HarmonyOS 的性能优化总结 1. HarmonyOS 的分布式能力 HarmonyOS 的分布…

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

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

keras转onnx,TensorFlow转tf.keras.models.load_model,onnx精度转换

参考&#xff1a; https://blog.csdn.net/Deaohst/article/details/126864267 转onnx 别直接转onnx。 先转PB&#xff1a; import tensorflow as tfmodel_path ./models/model.h5 # 模型文件 model tf.keras.models.load_model(model_path) model.sa…

如何使用Imagewheel+内网穿透搭建私人图床实现公网访问

文章目录 1.前言2. Imagewheel网站搭建2.1. Imagewheel下载和安装2.2. Imagewheel网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar临时数据隧道3.2.Cpolar稳定隧道&#xff08;云端设置&#xff09;3.3.Cpolar稳定隧道&#xff08;本地设置&#xff09; 4.公网访问测…

04-学成在线之系统管理服务模块之查询数据字典表中的内容,前后端联调测试

前后端联调 配置前端环境 实际开发中先由后端工程师将接口设计好并编写接口文档并交给前端工程师&#xff0c;前后端的工程师就开始并行开发 前端开发人员先自己mock数据即使用假数据进行开发,当后端代码完成后前端工程师尝试请求后端接口获取数据然后渲染到页面 第一步: 首…

spring boot中使用Bean Validation做优雅的参数校验

一、Bean Validation简介 Bean Validation是Java定义的一套基于注解的数据校验规范&#xff0c;目前已经从JSR 303的1.0版本升级到JSR 349的1.1版本&#xff0c;再到JSR 380的2.0版本&#xff08;2.0完成于2017.08&#xff09;&#xff0c;目前最新稳定版2.0.2&#xff08;201…

QGIS结合CityEngine制作卫星图地形模型

参考 https://blog.csdn.net/qq_17523181/article/details/134136379 https://blog.csdn.net/qq_17523181/article/details/134306063 安装QGIS软件与CityEngine软件 一、QGIS获取卫星图 QGIS新建工程安装插件 加入卫星图&#xff08;需要科学上网&#xff09;&#xff0c;目…