mysql索引原理简单说明

本次使用的是mysql5.7.17

首先说下索引中的组合索引,即多个字段组合的索引就叫做组合索引,但是什么时候会生效,什么时候会失效,我不是很清楚

首先建个表造点数据看下情况,

CREATE TABLE `bank` (`id` INT(11)  PRIMARY KEY AUTO_INCREMENT COMMENT '主键',`bank_end` VARCHAR(255) DEFAULT NULL COMMENT '银行卡后四位',`bank_name` VARCHAR(255) COMMENT '银行名称',`bank_funds` VARCHAR(255) DEFAULT NULL COMMENT '银行卡余额',`bank_use` VARCHAR(255) COMMENT '该笔金额用途',`update_resume_times` VARCHAR(255) DEFAULT NULL COMMENT '余额变动最新时间',`resume_user` VARCHAR(255) DEFAULT NULL COMMENT '消费人',`bank_resume_status` CHAR(1) DEFAULT NULL
)

  使用存储过程整点数据

 存储过程

DELIMITER $$CREATE PROCEDURE generate_bank_data(IN num INT)
BEGINDECLARE i INT DEFAULT 0;DECLARE batch_size INT DEFAULT 1000;  -- 每次插入的批次大小DECLARE bank_names VARCHAR(255);DECLARE bank_uses VARCHAR(255);DECLARE resume_users VARCHAR(255);DECLARE bank_end VARCHAR(4);DECLARE bank_funds VARCHAR(255);DECLARE update_time DATETIME;DECLARE resume_user VARCHAR(255);DECLARE bank_resume_status CHAR(1);-- 准备一些模拟数据的词汇SET bank_names = '工商银行,农业银行,建设银行,招商银行,平安银行,交通银行,中信银行';SET bank_uses = '消费,提现,转账,存款,支付,还款';SET resume_users = '张三,李四,王五,赵六,钱七,孙八,周九';-- 开启事务START TRANSACTION;-- 循环生成数据并逐条插入WHILE i < num DO-- 生成随机数据SET bank_end = LPAD(FLOOR(1000 + (RAND() * 9000)), 4, '0');SET bank_funds = CONCAT('¥', ROUND(1000 + (RAND() * 10000), 2));SET update_time = DATE_FORMAT(NOW() - INTERVAL (FLOOR(RAND() * 30)) DAY, '%Y-%m-%d %H:%i:%s');SET resume_user = SUBSTRING_INDEX(SUBSTRING_INDEX(resume_users, ',', FLOOR(1 + (RAND() * 7))), ',', -1);SET bank_resume_status = IF(RAND() > 0.5, '1', '0');-- 插入一条数据INSERT INTO bank (bank_name, bank_use, bank_end, bank_funds, update_resume_times, resume_user, bank_resume_status)VALUES (SUBSTRING_INDEX(SUBSTRING_INDEX(bank_names, ',', FLOOR(1 + (RAND() * 7))), ',', -1),  -- bank_nameSUBSTRING_INDEX(SUBSTRING_INDEX(bank_uses, ',', FLOOR(1 + (RAND() * 6))), ',', -1),  -- bank_usebank_end,  -- bank_endbank_funds,  -- bank_fundsupdate_time,  -- update_resume_timesresume_user,  -- resume_userbank_resume_status  -- bank_resume_status);-- 每次插入 `batch_size` 条数据IF (i + 1) % batch_size = 0 OR i + 1 = num THENCOMMIT;START TRANSACTION;END IF;SET i = i + 1;END WHILE;-- 提交事务COMMIT;END $$DELIMITER ;

  调用 

CALL generate_bank_data(50000);

 

 先来不同顺序的解释计划说明

 

 这里可以看到都是走了索引,和字段的先后顺序无关

 

 

 

 索引列顺序不正确

组合索引的字段顺序非常重要,MySQL 会尝试从索引的最左边开始匹配。如果查询条件没有按照组合索引的顺序来匹配字段,索引就不能有效地工作

 or操作符会导致索引失效

当查询包含多个条件并使用 OR 操作符时,MySQL 会试图分别使用每个条件的索引,这可能导致它无法有效地结合这些条件,从而导致索引的失效。MySQL 通常会放弃使用组合索引,而选择进行全表扫描

 对索引列使用函数表达式

索引的目的是加速检索数据,但如果对索引列使用了函数(如 UPPER(), LOWER())或者其他表达式,索引的值会在查询时被修改或计算,因此 MySQL 无法直接通过索引查找数据

  

 这里做了数字转为字符串的操作,原先定义好的索引没法使用,这里在进行进一步的解释

在这里mysql会识别到使用这个字段并不是高效的查找,所以会进行舍弃

  

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

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

相关文章

Vulnhub-Troll-1靶机-ftp匿名登录+流量包分析+hydra爆破+ssh登录脚本提权

一、靶机搭建 选择扫描虚拟机选择路径即可二、信息收集 扫ip 靶机ip:192.168.108.144扫开放端口 开放了ftp服务扫版本服务信息信息如下 21/tcp open ftp vsftpd 3.0.2 22/tcp open ssh OpenSSH 6.6.1p1 Ubuntu 2ubuntu2 (Ubuntu Linux; protocol 2.0) 80/tcp open …

八、(了解即可)MyBatis懒加载(或者叫延迟加载)

八、(了解即可)MyBatis懒加载(或者叫延迟加载)@目录八、懒加载(了解即可)8.1 为啥需要懒加载?8.2 懒加载是什么?8.3 开启方式8.4 既然fetchType可以控制懒加载那么我仅仅配置fetchType不配置全局的可以吗?8.5 aggressiveLazyLoading是做什么么的?8.6 注意点8.7 案例验证懒加…

基于惯性加权PSO优化的目标函数最小值求解matlab仿真

1.程序功能描述基于惯性加权PSO优化的目标函数最小值求解matlab仿真。 2.测试软件版本以及运行结果展示MATLAB2022A版本运行 (完整程序运行后无水印) 3.核心程序yfits = []; % 主循环开始 for iter =1: Miteryfit = zeros(Npop,1); % 初始化函数值数组% 更新粒子速度…

题解:at_abc391_e Hierarchical Majority Vote

对于一个长度为 \(3^n\) 的 01 字符串 \(B = B_1B_2\dots B_{3^n}\),定义一种操作获得长度为 \(3^{n-1}\) 的 01 字符串 \(C = C_1C_2\dots C_{3^{n-1}}\):对于 \(i = 1,2,\dots,3^{n-1}\),令 \(C_i\) 为 \(B_{3i}\)、\(B_{3i-1}\)、\(B_{3i-2}\) 中出现次数最多的字符。现给…

解决VScode设置ctrl+,被占用

关闭启用更多系统热键设置可以用OpenArk找找

Xmx_Xms的关系与设置技巧

以下是关于JVM参数 -Xmx(最大堆内存)和 -Xms(初始堆内存)的核心关系解析与设置技巧,通过结构化表格和场景化配置示例帮助你清晰掌握调优方法:一、基础定义与关系对比表参数 作用 默认值(JDK8) 关系说明-Xms 堆内存初始分配大小 物理内存的1/64 程序启动时立即分配的内存-…

vue3创建项目时,报错crypto$2.getRandomValues is not a function

一、问题在新建项目时,使用 npm create vue@latest 创建 vue3项目后,执行命令npm install后,这时候控制台报错TypeError:crypto$2.getRandomValues is not a function二、思路起初以为依赖安装不对,使用命令rm -rf node_modules/删除依赖包,再次执行命令npm install后控制…

钉钉、飞书、企微:同样的用户场景,不一样的产品经理!

在创业团队的办公协作中,选择合适的办公工具至关重要。钉钉、飞书和企业微信作为当前主流的办公软件,各有其独特的优势和设计理念。本文从产品经理的视角出发,对比分析了这三款软件在用户体验、功能设计、收费模式以及对创业团队适配性方面的差异,供大家参考。朋友决定创业…

【硬件测试】基于FPGA的64QAM基带通信系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR

1.算法仿真效果 本文是之前写的文章:《基于FPGA的64QAM基带通信系统,包含testbench,高斯信道模块,误码率统计模块,可以设置不同SNR》的硬件测试版本。在系统在仿真版本基础上增加了ila在线数据采集模块,vio在线SNR设置模块,数据源模块。硬件ila测试结果如下:(完整代码运行后…

基于PID控制器的车辆控制系统simulink建模与仿真

1.课题概述 基于PID控制器的车辆控制系统simulink建模与仿真,包括PID控制器和车辆模型。2.系统仿真结果 (完整程序运行后无水印) 3.核心程序与模型 版本:MATLAB2022a4.系统原理简介PID控制器(比例-积分-微分控制器)是一种广泛应用在控制理论与工程实践中的闭环控制策略,…

定时任务在若依中的应用

定时任务任务调度是指系统为了自动完成特定任务,在约定的特定时刻去执行任务的过程。有了任务调度即可解放更多的人力,而是由系统自动去执行任务。Cron表达式cron表达式是一个字符串, 用来设置定时规则, 由七部分组成, 每部分中间用空格隔开, 每部分的含义如下表所示:组成部分…