MySQL8.0新特性:函数索引,使用函数也不会导致索引失效~

news2025/1/18 12:00:23

文章目录

  • 写在前面
  • 使用函数索引
    • 1、数据准备
    • 2、索引验证
      • (1)普通索引
      • (2)函数索引
  • 总结

写在前面

之前我们知道,如果在查询中加入了函数,索引不生效,所以MySQL 8引入了函数索引,MySQL 8.0.13开始支持在索引中使用函数(表达式)的值。

函数索引基于虚拟列功能实现,在MySQL中相当于新增了一个列,这个列会根据你的函数来进行计算结果,然后使用函数索引的时候就会用这个计算后的列作为索引。

使用函数索引

1、数据准备

-- 建表
create table test(n1 varchar(10),n2 varchar(10));
-- 创建普通索引
create index idx_n1 on test(n1);
-- 创建一个大写的函数索引
create index func_idx on test((UPPER(n2)));
-- 准备数据
insert into test values('zhangsan', 'zhangsan2');
insert into test values('lisi', 'lisi2');
insert into test values('wangwu', 'wangwu2');
insert into test values('zhaoliu', 'zhaoliu2');

-- 查看索引
show index from test;

我们看到目前有两个索引,其中一个索引是通过表达式实现的:
在这里插入图片描述

2、索引验证

(1)普通索引

n1字段我们加了普通的字段索引,所以使用函数会导致索引失效:

explain SELECT * FROM `test` where UPPER(n1) = 'ZHANGSAN';

在这里插入图片描述
直接通过字段匹配,是可以正常使用索引的:

explain SELECT * FROM `test` where n1 = 'zhangsan';

在这里插入图片描述

(2)函数索引

n2字段我们添加了函数索引,直接通过函数匹配可以使用索引:

explain SELECT * FROM `test` where UPPER(n2) = 'ZHANGSAN';

在这里插入图片描述

但是不使用函数,直接匹配字段,是不会使用索引的:

explain SELECT * FROM `test` where n2 = 'zhangsan';

在这里插入图片描述

总结

当必须要使用函数时,通过创建函数索引,也可以极大的提高查询效率。

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

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

相关文章

Uview------使用教程

一、点击一下链接安装: https://ext.dcloud.net.cn/plugin?id1593 如果使用HBuilderX编辑器的可以直接点击第一种方式自动安装即可 二:配置文件 在main.js中写入 记得要写在import Vue from vue下面 import uView from ./uni_modules/uview-ui Vue…

【EI征稿中|ACM出版】2023 人工智能、系统与网络安全国际学术会议 (AISNS 2023)

2023 人工智能、系统与网络安全国际学术会议 (AISNS 2023) 2023 International Conference on Artificial Intelligence, Systems and Network Security 由西南科技大学计算机科学与技术学院主办的2023人工智能、系统与网络安全国际学术会议 (AISNS 2023&#xff…

windows MYSQL下载和自定路径安装,以及解决中文乱码问题。

文章讲的很详细,请耐心往下看。 一、mysql下载 下载网址:https://www.mysql.com/downloads/ 表示不登录,直接下载。 以上就把安装包下载完了。下载是8.0.35版本。 二、接下来看怎么安装 1.双击安装包,进行安装。 注意&#x…

MX6ULL学习笔记 (八) platform 设备驱动实验

前言: 什么是 Linux 下的 platform 设备驱动 Linux下的字符设备驱动一般都比较简单,只是对IO进行简单的读写操作。但是I2C、SPI、LCD、USB等外设的驱动就比较复杂了,需要考虑到驱动的可重用性,以避免内核中存在大量重复代码&…

MATLAB - 绘制立体图(平面+水深)

目录 代码结果 代码 % 在 X-Y 平面上绘图 % 正常绘制平面图 [X,Y,Z] peaks; contour(X,Y,Z,20); hold on% ****重点******************************************** % 改为三维视图,具体可以help % view(3); %此时的平面图对应z0 ;默认az-37.5&#x…

Sql Server关于表的建立、修改、删除

表的创建: (1)在“对象资源管理器”面板中展开“数据库”节点,可以看到自己创建的数据库,比如Product。展开Product节点,右击“表”节点,在弹出的快捷菜单中选择“新建表”项,进入“…

[FPGA 学习记录] 快速开发的法宝——IP核

快速开发的法宝——IP核 文章目录 1 IP 核是什么2 为什么要使用 IP 核3 IP 核的存在形式4 IP 核的缺点5 Quartus II 软件下 IP 核的调用6 Altera IP 核的分类 在本小节当中,我们来学习一下 IP 核的相关知识。 IP 核在 FPGA 开发当中应用十分广泛,它被称为…

FastAPI查询参数和字符串校验

在FastAPI中,你可以为参数声明额外的信息和校验。这对于查询参数来说尤其有用,因为它们通常用于过滤或排序结果。本教程将引导你如何使用Query对象来添加这些额外的校验。 导入所需库 首先,你需要导入FastAPI以及Query对象: fr…

【已解决】ImportError: cannot import name ‘Merge‘ from ‘keras.layers‘

问题描述 ImportError: cannot import name ‘Merge‘ from ‘keras.layers‘ 解决办法 1、tensorflow和keras版本要对应; 2、使用"merge" pip uninstall keras pip install keras2.3.1 from keras.layers import merge完结撒花 我这血中带泪的成长&…

从传统到胜利:广汽集团汽车产业创新之旅

置身于汽车行业百年未有之大变局,作为传统车企中的排头兵,广汽创新可圈可点,广汽近年来取得了骄人业绩,不论是整体产销规模,还是新能源汽车产业化、新技术领域开拓等,都呈现节节攀升的局面。本文奖从产业变…

2024年值得关注的8个未来数据库

2024年值得关注的8个未来数据库 关系型数据库管理系统在数据库技术领域占据主导地位已经多年了。当SQL在1970年代首次出现时,关系型数据库管理系统的使用和受欢迎程度迅速提升。很快,MySQL成为了大多数公司和团队首选的数据库。 然而,2023年…

时间序列预测实战(二十六)PyTorch实现Seq2Seq(LSTM)(结果可视化+自动保存结果)

一、本文介绍 本文给大家带来的时间序列模型是Seq2Seq,这个概念相信大家都不陌生了,网上的讲解已经满天飞了,但是本文给大家带来的是我在Seq2Seq思想上开发的一个模型和新的架构,其是专门为新手开发的,而且为了方便大…

上海亚商投顾:沪指探底回升微跌 AI概念股全线反弹

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 大指数早间震荡调整,午后探底回升集体翻红,临近尾盘又小幅走弱。AI概念股全线反弹&…

pytorch优化之SAM优化器

1. SAM介绍 人机验证 2. 案例 ❀精度优化❀优化策略1:网络SAM优化器_夏天|여름이다的博客-CSDN博客文章浏览阅读3.3k次,点赞10次,收藏30次。精度优化策略:SAM:Sharpness AwarenessMinimization锐度感知最小化论文&…

【CCF CSP】202309-2 坐标变换(其二)

80分超时暴力代码&#xff1a;读入数据&#xff0c;对于每个待操作坐标都重新对于所给区间进行平移&#xff0c;旋转的坐标变换 #include <iostream> #include <cmath>using namespace std;struct mani {int type;double num; }; mani all[100001];int main() {in…

在VSCode中运行Python脚本文件时如何传参

以下实验所处的操作系统环境说明&#xff1a; OS版本MacOSMonterey 12.1VSCodeOctober 2023 (version 1.84.2) 一、背景 在 VSCode 中写好 Python 脚本后&#xff0c;如果要运行起来&#xff0c;可以怎么做呢&#xff1f; 一般有以下几种方式&#xff1a; 1、直接在 VSCode…

简单使用selenium抓取微博热搜话题存储进Excel表格中

#test.pyimport requests from selenium import webdriver import time from write import write#首先打开浏览器 drive webdriver.Chrome()#设置隐式等待&#xff1a;等待元素找到&#xff0c;如果找到元素则马上继续执行语句&#xff0c;如果找不到元素&#xff0c;会在设定…

【性能测试】性能测试之性能测试指标详解(详细)

前言 刚开始&#xff0c;以为做性能测试&#xff0c;就是做些脚本、参数化、关联&#xff0c;压起来之后&#xff0c;再扔出一个结果。 但实际上不止这些内容&#xff0c;还要加上性能分析&#xff0c;关注调优之后响应时间有多大的提升&#xff0c;TPS 有多大的提高&#xf…

探索 HTML 语义化:让你的网页更有意义(下)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

【链表Linked List】力扣-117 填充每个节点的下一个右侧节点指针II

目录 问题描述 解题过程 官方题解 问题描述 给定一个二叉树&#xff1a; struct Node {int val;Node *left;Node *right;Node *next; } 填充它的每个 next 指针&#xff0c;让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点&#xff0c;则将 next 指针设置为 N…