MySQL 8中新增的这三大索引 隐藏、降序、函数

yizhihongxing

MySQL 8中新增了许多索引的功能,其中比较常用且值得重点学习的有三个:隐藏索引、降序索引、函数索引。

隐藏索引

隐藏索引实际上指的是覆盖索引的一种,即只包含列的索引,不存储对应的行数据。这种索引可以减少不必要的I/O读写操作,从而提高查询效率。

以下是一个简单的示例,假设有一个表students,其中有sid、name、age、gender四个字段,我们需要查询age为18岁的所有学生姓名:

SELECT name FROM students WHERE age = 18;

如果在age列上创建索引,MySQL会使用B-Tree算法搜索索引,然后根据索引中的主键去回表查询,这时会把name列作为回表查询的列。由于name列并没有索引,因此需要进行全表扫描,效率较低。

此时,我们可以创建一个只包含age和name两个列的联合索引,避免直接扫描name列:

ALTER TABLE students ADD INDEX idx_age_name(age, name);

查询语句改成以下就可以避免全表扫描了:

SELECT name FROM students WHERE age = 18;

由于该索引只包含age和name两个字段,因此不需要回表查询,可以直接从索引中取出name的值,因此该查询操作速度会有所提升。

降序索引

MySQL中的B-Tree索引默认是升序排序的,因此在使用ORDER BY子句进行排序时,如果要使用索引,则需要在索引上进行一个反转操作,变成降序排列,以便更好地优化查询性能。

以下是一个简单示例,假设有一个表grades,其中有sid、cid、score三个字段,我们需要查询某门课程成绩最高的学生:

SELECT * FROM grades WHERE cid = 'math' ORDER BY score DESC LIMIT 1;

如果创建了一个包含(cid, score)的联合索引,MySQL会使用索引键顺序在索引树上搜索,得到符合条件的记录,并按照score进行排序,但排序时需要频繁地读取和反转score值,会导致额外的性能损耗。

因此,我们可以创建一个降序索引,避免排序操作时的性能问题:

ALTER TABLE grades ADD INDEX idx_cid_score(cid, score DESC);

这样,在执行SELECT语句时,MySQL会先搜索索引,找出符合cid条件的记录,并按照score的降序排列,然后直接读取对应的行数据,无需再执行排序操作,从而提高查询的性能。

函数索引

MySQL可以支持在索引中使用函数,这个功能可以帮助我们更好地优化查询。例如,可以使用字符串函数,对索引列的值进行相应的处理,然后再使用索引。

以下是一个简单的示例,假设有一个表items,其中有id、title、content三个字段,我们需要查询包含“mysql”关键词的记录:

SELECT * FROM items WHERE MATCH(title, content) AGAINST('mysql');

如果我们在title和content字段上分别创建索引,MySQL会使用内建的全文索引引擎InnoDB进行检索,但如果直接在函数中使用AGAINST函数,则无法使用这些索引,会导致全表扫描和更慢的查询速度。

因此,我们可以创建一个函数索引,让MySQL在检索时能够使用整个索引,提高查询效果:

CREATE FULLTEXT INDEX idx_items_ft ON items (CONCAT(title, ' ', content));

这样,在执行查询操作时,MySQL会自动使用该函数创建的索引,进行全文检索操作,避免了全表扫描和更慢的查询速度。

以上就是MySQL 8中新增的这三大索引的完整攻略,其中包含了隐藏索引、降序索引和函数索引等内容,同时也给出了两个操作示例,希望能够对大家的查询操作提供帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MySQL 8中新增的这三大索引 隐藏、降序、函数 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • DBMS 泛化

    DBMS泛化是数据保护中的一种重要技术。它指的是对敏感数据进行模糊化处理,将原始数据变换成一定的形式,从而保护数据的机密性和隐私性。其目的是避免数据的原始值泄露,从而保护敏感信息。 在进行泛化处理时,需要遵守以下几个步骤: 确定需要泛化的数据 首先需要明确哪些数据需要进行泛化处理。敏感数据通常包括个人身份信息、财务信息、健康信息等,需要进行保护。 例如,一个…

    database 2023年3月27日
    00
  • mysql insert的几点操作(DELAYED,IGNORE,ON DUPLICATE KEY UPDATE )

    MySQL中的INSERT语句用于将数据插入到表中。在插入过程中,我们还可以使用一些额外的参数,来控制INSERT的行为。其中包括:DELAYED、IGNORE和ON DUPLICATE KEY UPDATE。 接下来,我们分别来详细讲解一下这三种参数的使用方法,以及给出示例说明。 DELAYED DELAYED关键字可以被用于INSERT语句中,表示该插入…

    database 2023年5月22日
    00
  • MySql按时,天,周,月进行数据统计

    要对 MySql 数据库中的数据进行按时、天、周、月等维度的统计,一般需要借助 SQL 语言中的 GROUP BY 和 DATE 函数来实现。 下面是具体步骤: 1. 确认需求 首先需要明确需要进行的数据统计需求,包括统计哪些指标、按照哪些维度、需要的时间范围等,从而可以明确 SQL 语句的核心逻辑。 2. 选择统计的数据表 根据需求选择需要进行统计的数据表…

    database 2023年5月22日
    00
  • Oracle动态交叉表生成

    有关于“Oracle动态交叉表生成”的完整攻略,下面是具体的讲解。 什么是Oracle动态交叉表? 在Oracle中,交叉表也称为“Pivot table”,它能够将表格数据从行展示为列,以便更好地进行分析和处理。而动态交叉表则表示交叉表的列数是不确定的,它通过动态生成列来存储数据,这些列名通常要根据数据的内容来生成。 Oracle动态交叉表生成流程 动态交…

    database 2023年5月21日
    00
  • 浅谈数据库优化方案

    浅谈数据库优化方案 1. 优化前的考虑 在优化数据库之前,需要先了解当前的数据库使用情况。以下是一些需要考虑的问题: 数据库规模:数据库中有多少表、多少条数据? 数据库负载:数据库的读写负载如何?高峰期和低谷期有什么不同? 数据库模式:使用了哪种数据库模式?关系型、文档型、图形型? 数据库架构:数据库的物理结构如何?单体、主从、分片等? 各种索引:哪些字段需…

    database 2023年5月19日
    00
  • php安装redis扩展过程介绍

    下面是详细的php安装redis扩展过程介绍攻略。 安装Redis扩展前的准备工作 在安装Redis扩展之前,需要先保证已经安装了Redis服务器,可以通过以下命令检查Redis是否已经安装: redis-cli ping 如果输出为PONG,则表示Redis服务器已经启动,在此基础上开始安装Redis扩展。 安装Redis扩展 步骤1:下载Redis扩展源…

    database 2023年5月22日
    00
  • MySQL单表查询常见操作实例总结

    MySQL单表查询常见操作实例总结 MySQL的单表查询是数据库操作的基础,多数时候我们的操作都是围绕着单表查询来展开的。在这里,我将总结了几种常见的MySQL单表查询的操作,包括:SELECT、DISTINCT、WHERE、AND、OR、IN、BETWEEN、LIKE、ORDER BY、GROUP BY、HAVING、LIMIT等。 SELECT SELE…

    database 2023年5月22日
    00
  • Windows下MySQL详细安装过程及基本使用

    下面我将详细讲解一下“Windows下MySQL详细安装过程及基本使用”的完整攻略。 Windows下MySQL详细安装过程及基本使用攻略 1. 下载MySQL Installer 在安装MySQL之前,我们首先需要下载MySQL Installer。 我们可以前往MySQL官网,从官网的下载区域下载MySQL Installer。 2. 安装MySQL 下…

    database 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部