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

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日

相关文章

  • 基于PostgreSQL密码重置操作

    基于PostgreSQL密码重置操作的完整攻略如下。 1. 登录PostgreSQL 首先,需要登录PostgreSQL数据库系统,并以超级用户身份进行操作。可以通过以下命令登录: sudo -i -u postgres 这将以postgres用户身份在终端中打开一个新的shell。 2. 进入pgAdmin 接下来,进入pgAdmin图形界面工具。在pgA…

    database 2023年5月22日
    00
  • Nebula Graph解决风控业务实践

    Nebula Graph解决风控业务实践攻略 背景 随着互联网的不断发展,如今各类金融交易和应用场景越来越多,也同时伴随着声名狼藉的诈骗事件。因此,风控业务逐渐成为了各类金融应用的重要组成部分,并且随着模型数据的丰富,传统关系型数据库已经无法满足需求。这时候,图数据库的优越性就显现了出来,Nebula Graph就是一个很好的选择。 Nebula Graph…

    database 2023年5月21日
    00
  • mysql表优化、分析、检查和修复的方法详解

    当涉及到MySQL的表优化、分析、检查和修复时,我们通常会采用以下方法: 1. 表优化 当表出现明显的性能问题或需要处理大量数据时,我们可以进行表优化。表优化的主要目标是消除表的碎片,并使它们的大小更加均匀,以提高性能。 步骤: 使用OPTIMIZE TABLE语句对表进行优化。例如: OPTIMIZE TABLE table_name; 2. 分析表 表的…

    database 2023年5月19日
    00
  • 一篇文章带你掌握SQLite3基本用法

    一篇文章带你掌握SQLite3基本用法 什么是SQLite3 SQLite3是一种轻型的关系型数据库管理系统(DBMS),它的设计目标是嵌入式的,即一个完整的数据库可以存储在一个应用程序中的一个单独的文件。 如何使用SQLite3 使用SQLite3,我们需要掌握一些基本的用法,包括: 创建数据库 我们可以使用SQLite3命令行工具来创建一个数据库,比如:…

    database 2023年5月21日
    00
  • Linux执行.sh文件时提示No such file or directory该怎么办(三种解决办法)

    当在Linux中执行一个.sh文件时,有时会遇到”No such file or directory”的错误提示,这可能是由于文件不存在或者权限问题导致的。以下是三种常见的解决办法: 解决方法一:检查文件是否存在 首先,应该检查文件是否确实存在。可以使用ls命令查看当前目录下的所有文件。如果找不到该文件,可以尝试使用绝对路径来执行该文件。 例如,如果文件名为…

    database 2023年5月22日
    00
  • MongoDB使用profile分析慢查询的步骤

    下面是MongoDB使用profile分析慢查询的完整攻略: 1. 开启profile功能 在MongoDB中,可以通过开启profile功能来记录所有的操作信息,包括查询操作。使用profile功能需要在MongoDB启动时指定相应的配置,并在Mongo shell中设置。 如下是MongoDB启动时的配置: mongod –profile=2 # 记录…

    database 2023年5月21日
    00
  • PHP/Javascript/CSS/jQuery常用知识大全详细整理第2/2页

    关于“PHP/Javascript/CSS/jQuery常用知识大全详细整理第2/2页”的完整攻略,我来为你进行详细讲解。 攻略概览 PHP部分 表单处理 文件操作 MySQL数据库操作 Javascript部分 基础语法 DOM操作 AJAX CSS部分 盒模型 居中布局 响应式设计 jQuery部分 基础语法 DOM操作 事件绑定 PHP部分 表单处理 …

    database 2023年5月22日
    00
  • SQLServer中用T—SQL命令查询一个数据库中有哪些表的sql语句

    要查询SQL Server数据库中的所有表,可以使用如下的T-SQL命令: SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE=’BASE TABLE’ 该命令在 INFORMATION_SCHEMA 的 TABLES 视图中检索表名,并指定类型为‘BASE TABLE’的表。该…

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