索引:索引知识重复习,什么是索引、索引的类型、建立索引及【最左匹配原则】、Explain查看sql的执行计划

这篇具有很好参考价值的文章主要介绍了索引:索引知识重复习,什么是索引、索引的类型、建立索引及【最左匹配原则】、Explain查看sql的执行计划。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

开干
索引:索引知识重复习,什么是索引、索引的类型、建立索引及【最左匹配原则】、Explain查看sql的执行计划

什么是索引

在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。

简单说,把数据库比作一本书,索引就是书中的目录,索引就是用来快速查找数据库中的内容的。

索引的优点:
通过创建唯一索引,来保证数据库表中的每一行数据的唯一性。
• 可以加快数据的检索速度。
• 可以保证表数据的完整性与准确性

索引的缺点:
索引需要占用物理空间。
• 对表中的数据进行改动时,索引也需要跟着动态维护,降低了数据的维护速度。

索引的类型

在mysql中,常见的索引类型有:index普通索引、fulltext全文索引、primary key主键索引、unique唯一索引、复合索引及空间索引

接下来一一为大家介绍这几种索引及用法

主键索引(primary key)

这个最简单:每张表一般都会有自己的主键,只要有主键,mysql就会在主键上建立一个索引,这就是主键索引。主键是具有唯一性并且不允许为null。

主键索引的创建就不多说了,不会建议重学基础。

普通索引(index)

顾名思义就是各类索引中最为普通的索引,主要任务就是提高查询速度。其特点是允许出现相同的索引内容,允许空(null)值

CREATE TABLE `test` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键id',
  `username` varchar(20) DEFAULT NULL,
  `servnumber` varchar(30) DEFAULT NULL,
  `password` varchar(20) DEFAULT NULL,
  `createtime` datetime DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE,//主键
  KEY `index_username` (`username`)//普通
) ENGINE=InnoDB DEFAULT CHARSET=utf8 

或者:

-- 创建索引的基本语法
CREATE INDEX indexName ON table(column(length));

--:length默认我们可以忽略
CREATE INDEX idx_name ON test(username);

复合索引

复合索引也叫组合索引,指的是我们在建立索引的时候使用多个字段,例如同时使用身份证和手机号建立索引,同样的可以建立为普通索引或者是唯一索引。

alter table table_name add index index_name(column1,column2,column3);

复合索引的使用最左匹配原则。举个例子 我们使用 phone和name创建索引。

参考:https://blog.csdn.net/wang121213145/article/details/124202161

全文索引(fulltext)

全文索引主要用来查找文本中的关键字,而不是直接与索引中的值相比较。fulltext索引跟其它索引大不相同,它更像是一个搜索引擎,而不是简单的where语句的参数匹配。fulltext索引配合match against操作使用,而不是一般的where语句加like。

它可以在create table,alter table ,create index使用,不过目前只有char、varchar,text 列上可以创建全文索引。正常情况下我们也不会使用到全文索引,因为这不是mysql的专长。

alter table table_name add fulltext(column);

空间索引

空间索引是对空间数据类型的字段建立的索引,MYSQL中的空间数据类型有4种,分别是GEOMETRY、POINT、LINESTRING、POLYGON。MYSQL使用SPATIAL关键字进行扩展,使得能够用于创建正规索引类型的语法创建空间索引。

创建空间索引的列,必须将其声明为NOT NULL,空间索引只能在存储引擎
为MYISAM的表中创建。空间索引一般是用不到了,了解即可。

唯一索引

alter table table_name add unique(column);

索引修改及删除

1.drop index 索引名称 on 表名;
2.alter table 表名 drop index 索引名;

Explain

通过explain查看sql的执行计划时,Extra字段的值往往会看到Using where; Using index; Using temporary; Using filesort

一、using filesort(减慢查询效率)

在使用order by关键字的时候,如果待排序的内容不能由所使用的索引直接完成排序的话,那么mysql有可能就要进行文件排序。

【这个 filesort 并不是说通过磁盘文件进行排序,而只是告诉我们进行了一个排序操作而已】。

filesort使用的算法是QuickSort,即对需要排序的记录生成元数据进行分块排序,然后再使用mergesort方法合并块。其中filesort可以使用的内存空间大小为参数sort_buffer_size的值,默认为2M。当排序记录太多sort_buffer_size不够用时,mysql会使用临时文件来存放各个分块,然后各个分块排序后再多次合并分块最终全局完成排序。

二、Using temporary

Using temporary表示由于排序没有走索引、使用union、子查询连接查询、使用某些视图等原因。因此创建了一个内部临时表。注意这里的临时表可能是内存上的临时表,也有可能是硬盘上的临时表,理所当然基于内存的临时表的时间消耗肯定要比基于硬盘的临时表的实际消耗小。

三、using index

using index :使用覆盖索引的时候就会出现

四、useing where

using where:在查找使用索引的情况下,需要回表去查询所需的数据文章来源地址https://www.toymoban.com/news/detail-406853.html

到了这里,关于索引:索引知识重复习,什么是索引、索引的类型、建立索引及【最左匹配原则】、Explain查看sql的执行计划的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • MSQL系列(十二) Mysql实战-为什么索引要建立在被驱动表上

    Mysql实战-为什么索引要建立在被驱动表上 前面我们讲解了B+Tree的索引结构,也详细讲解下 left Join的底层驱动表 选择原理,那么今天我们来看看到底如何用以及如何建立索引和索引优化 开始之前我们先提一个问题, 为什么索引要建立在被驱动表上 ? 1.建表及测试数据 我们先

    2024年02月08日
    浏览(34)
  • SpringBoot复习:(51)默认情况下DataSource是怎么创建出来的,是什么类型的?

    DataSource是通过DataSourceAutoConfiguration创建的,这个类代码如下: 可以看到DataSourceAutoConfiguration有个静态内部类PooledDataSourceConfiguration,在这个类上有个@Import注解,导入了DataSourceConfiguration.Hikari这个类,它的代码如下: 可以看到,如果没有在配置文件指定 spring.datasource.type这个属

    2024年02月12日
    浏览(37)
  • 表索引(索引的设计原则)详解

    目录 前言 一、选择唯一性索引 二、为经常需要排序、分组和联合操作的字段建议索引 三、为经常作为查询条件的字段建立索引 四、限制索引的数目 五、尽量使用数据量少的索引 六、尽量使用前缀来索引 七、删除不再使用或者很少使用的索引         为了使索引的使用

    2024年02月02日
    浏览(24)
  • 索引的创建与设计原则

    1.1索引的分类 MySQL的索引包括普通索引、唯一性索引、全文索引、单列索引、多列索引和空间索引等。 从 功能逻辑 上说,索引主要有 4 种,分别是普通索引、唯一索引、主键索引、全文索引。 按照 物理实现方式,索引可以分为 2 种: 聚族索引和非聚族索引。 按照 作用字段

    2024年02月08日
    浏览(28)
  • MySQL 创建索引的原则,优化的思路

    MySQL的索引包括普通索引、唯一性索引、全文索引、单列索引、多列索引和空间索引等。 从 功能逻辑 上说,索引主要有 4 种,分别是普通索引、唯一索引、主键索引、全文索引。 按照 物理实现方式 ,索引可以分为 2 种:聚簇索引和非聚簇索引。 按照 作用字段个数 进行划

    2024年02月08日
    浏览(36)
  • 第19章:索引的创建与设计原则

    功能逻辑 :普通索引,主键索引,唯一索引,全文索引 物理实现方式 :聚簇索引和非聚簇索引 作用字段个数 :单列索引和联合索引 1. 普通索引 对表中的任何字段都可以创建,没有限制条件。如:student表中的name字段建立一个普通索引,查询记录时根据索引进行查询 2. 唯一

    2024年02月09日
    浏览(26)
  • 华为之ACL应用于Traffic Policy/华为策略路由匹配原则

    如果报文没有匹配到traffic policy中的Classifier该怎么处理? 一个Traffic policy中可以配置一个或多个Classifier Behavior对。 当收到一个报文,做复杂流分类处理时,会按照Traffic-policy中Classifier Behavior对的配置顺序进行匹配。 如果命中,则停止匹配;如果不命中,则匹配后面的Classi

    2024年02月07日
    浏览(25)
  • MySQL进阶篇:索引(概述,结构,分类,语法,SQL性能分析,索引使用,设计原则)

    索引(index)是帮助MysQL 高效获取数据的数据结构 ( 有序 )。 在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。 优缺点: MySQL的索引是在存储

    2024年01月20日
    浏览(31)
  • BoostCompass(建立正排索引和倒排索引模块)

    这个模块我们定义了一个名为 Index 的C++类,用于构建和维护一个文档索引系统。该系统采用单例模式确保只有一个索引实例,并使用正排索引和倒排索引来快速检索文档。正排索引存储了文档的基本信息,如标题、内容和URL,而倒排索引则根据将文档分组。类中提供了

    2024年04月13日
    浏览(34)
  • 【数据处理】建立数据库索引并定时重建索引

    给表 建立索引能加速查询 (我的习惯是给经常查询的列建立索引,如果经常查询的是id列,我会给将id设置为主键),长时间查询后会变慢(具体原因目前不清楚),公司前辈说 定期重建索引就可以解决问题 ,我就在 Microsoft Sql Server Management Studio 里设置了定时“自动重建索

    2024年01月25日
    浏览(37)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包