mysql索引学习案例

简单的学习一下mysql普通索引

这是一个小的案例

一、创建表SQL

CREATE TABLE `group_order` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `group_seq` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '拼单号',
  `group_status` int(8) NOT NULL COMMENT '100 待提货, 200 已提货, 300 已取消',
  `purchase_user_id` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '下单商家',        
  `user_id` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '下单人',        
  `product_id` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '商品id',        
  `saler_user_id` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '商品所属人',        
  `payable_money` bigint(16) NOT NULL COMMENT '应付金额',
  `piece_amount` int(16) NOT NULL COMMENT '件数',        
  `pick_code` varchar(16) COLLATE utf8mb4_bin NOT NULL COMMENT '自提码',
  `verify_status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '核销状态  0失效, 1 生效', 
  `remark` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '备注',
  `order_time` datetime NOT NULL COMMENT '下单',                
  `create_time` datetime NOT NULL,
  `update_time` datetime NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `unique_group_seq` (`group_seq`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=COMPACT COMMENT='拼单';

二、造数据

-- 删除存储过程
DROP PROCEDURE IF EXISTS generate_group_order_data;
DELIMITER //

-- 创建存储过程
CREATE PROCEDURE generate_group_order_data()
BEGIN
    DECLARE i INT DEFAULT 0;

    -- Disable autocommit for the duration of the procedure
    SET autocommit = 0;

    -- Start the transaction
    START TRANSACTION;
	-- 800000 就是80w条数据,这里自己选择创建多少,数据太少也展现不出来索引的作用
    WHILE i < 800000 DO
        INSERT INTO group_order (
            group_seq, group_status, purchase_user_id, user_id, product_id, saler_user_id,
            payable_money, piece_amount, pick_code, verify_status, remark, order_time,
            create_time, update_time
        ) VALUES (
            UUID(), FLOOR(1 + RAND() * 300), UUID(), UUID(), UUID(), UUID(),
            FLOOR(100 + RAND() * 9900), FLOOR(1 + RAND() * 100), LPAD(FLOOR(RAND() * 10000), 4, '0'),
            FLOOR(RAND() * 2), NULL, NOW() - INTERVAL FLOOR(RAND() * 365) DAY,
            NOW(), NOW()
        );

        SET i = i + 1;
    END WHILE;

    -- Commit the transaction
    COMMIT;

    -- Re-enable autocommit
    SET autocommit = 1;
END //

DELIMITER ;

-- 调用存储过程以生成数据
CALL generate_group_order_data();

三、GO


3.1 查询数据总条数
SELECT COUNT(1) FROM group_order;

在这里插入图片描述

这里数据是101w


3.2 使用唯一索引查询数据
SELECT * FROM group_order 
WHERE group_seq ='d6b9ebf0-8427-11ee-9600-988fe06b9059'
order by update_time desc limit 0,20;

在这里插入图片描述
在这里插入图片描述

可以看到查询速度在0.018s,速度还可以


3.3 不使用索引查询数据
EXPLAIN SELECT * FROM group_order 
WHERE group_status = 41
order by update_time desc limit 0,20;	

在这里插入图片描述


在这里插入图片描述

这里时间为1.938s,客户都等崩溃了


3.4 使用两个条件查询数据

一个条件有索引,一个条件没索引

3.4.1 索引条件在后

这里无索引条件在前,有索引条件在后

EXPLAIN SELECT * FROM group_order 
WHERE group_status = 41  
AND group_seq='d6b9ebf0-8427-11ee-9600-988fe06b9059' 
order by update_time desc limit 0,20;			

在这里插入图片描述
在这里插入图片描述

3.4.2 索引条件在前

这里索引条件在前,无索引条件在后

EXPLAIN SELECT * FROM group_order 
WHERE group_seq='d6b9ebf0-8427-11ee-9600-988fe06b9059'  
AND group_status = 41
order by update_time desc limit 0,20;					

在这里插入图片描述
在这里插入图片描述


3.5 给group_status添加普通索引
-- 添加group_status字段的普通索引
CREATE INDEX idx_group_status ON group_order(group_status);

3.5 查看表中的索引
-- 查询指定表中的索引
SHOW INDEX FROM group_order;

在这里插入图片描述


3.6 使用刚刚创建的索引字段进行查询
EXPLAIN SELECT * FROM group_order 
WHERE group_status = 41 
order by update_time desc limit 0,20;		

在这里插入图片描述
在这里插入图片描述

这里因为数据量比较大,在第一次查询时使用了0.55s,其余结果均为0.025s左右

四、释义

  1. 这里选择使用了 group_status 来当索引,只是为了演示,一般状态字段不建议做索引
  2. 图片中Extra:Using index condition

Using index condition: 这表示MySQL正在利用索引中的一部分条件来执行查询。具体来说,这通常发生在使用了覆盖索引(covering index)的情况,即查询的所有列都包含在索引中,而无需进一步查找实际的数据行。

  1. 图片中Extra:Using filesort

Using filesort: 这表示MySQL需要对结果进行排序,并且这个排序操作是通过创建一个临时文件来完成的。这通常发生在无法使用索引满足ORDER BY的排序顺序时,或者在MySQL版本较旧的情况下。


PS 感谢观看

世上只有一种英雄主义,就是在认清生活真相之后依然热爱生活。— 罗曼罗兰

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024年山东省职业院校技能大赛中职组 “网络安全”赛项竞赛试题-B卷

2024年山东省职业院校技能大赛中职组 “网络安全”赛项竞赛试题-B卷 2024年山东省职业院校技能大赛中职组 “网络安全”赛项竞赛试题-B卷A模块基础设施设置/安全加固&#xff08;200分&#xff09;A-1&#xff1a;登录安全加固&#xff08;Windows, Linux&#xff09;A-2&#…

vite+vue3+ts中watch和watchEffct的使用

vitevue3ts中watch和watchEffct的使用 本文目录 vitevue3ts中watch和watchEffct的使用watchrefreactivepropsimmediate组合监听 watchEffect单值多值侦听副作用停止监听 watch vue官方文档&#xff1a;https://cn.vuejs.org/api/reactivity-core.html#watch 可以监听基础类型&…

cookie机制 + java 案例

目录 为什么会有cookie?? cookie从哪里来的&#xff1f;&#xff1f; cookie到哪里去&#xff1f;&#xff1f; cookie有啥用&#xff1f;&#xff1f; session HttpServletRequest类中的相关方法 简单的实现cookie登录功能 实现登录页面 实现servlet逻辑 实现生成主…

牛客机考题编程题输入输出

有时空可以练练这里的题目&#xff1a; https://ac.nowcoder.com/acm/contest/5652 做个总结&#xff0c;其实就两种输入类型&#xff1a; 一种是下面这种&#xff0c;需要对输入的每行进行运算 这种就是循环读取每行的数做一个运算&#xff1a; import sys while True:line …

【Nuxt】Nuxt3 动态导入图片 src

nuxt3 不再支持 require 动态导入资源&#xff0c;因此需要我们将图片放到 public 目录下&#xff0c;这样我们就可以动态导入了 比如下面 &#x1f447;&#xff1a; 感谢 Nuxt3遇见的坑&#xff08;四&#xff09;&#xff1a;图片动态渲染之后打包路径问题以及打包css样式…

代码混淆的原理是什么?常见代码混淆方法介绍

​ 代码混淆的原理是什么&#xff1f;常见代码混淆方法介绍 本文主要想你介绍代码混淆的原理&#xff0c;常见代码混淆方法&#xff0c;欢迎查阅~ 移动应用代码安全非常重要&#xff0c;代码逆向会导致代码逻辑被获取&#xff0c;进一步导致控制流被hook&#xff0c;安全防线被…

SystemVerilog学习 (11)——覆盖率

目录 一、概述 二、覆盖率的种类 1、概述 2、分类 三、代码覆盖率 四、功能覆盖率 五、从功能描述到覆盖率 一、概述 “验证如果没有量化&#xff0c;那么就意味着没有尽头。” 伴随着复杂SoC系统的验证难度系数成倍增加&#xff0c;无论是定向测试还是随机测试&#xff…

reids面试题

1 redis是单线程吗&#xff1f; Redis是单线程 主要是指Redis的网络10和键值对读写是由一个线程来完成的&#xff0c;Redis在处理客户端的请求时包括获取(socket 读)、解析、执行、内容返回(socket 写) 等都由一个顺序串行的主线程处理&#xff0c; 但Redis的其他功能&#xff…

结合 Django 和 Vue.js 打造现代 Web 应用

概要 在 Web 开发的世界里&#xff0c;Django 和 Vue.js 分别是后端和前端两个非常流行的框架。Django 以其强大的后端能力、快速开发以及安全性而著称&#xff0c;而 Vue.js 因其简洁、灵活和易于上手在前端开发领域广受欢迎。 本篇文章将详细介绍如何将 Django 与 Vue.js 结…

Jetson简介、编程开发与环境搭建

Jetson简介、编程开发与环境搭建 简介常用指令Jetpack环境搭建 简介 Jetson是由NVIDIA推出的一系列嵌入式系统&#xff0c;旨在用于机器学习和人工智能应用的开发。Jetson平台通常使用NVIDIA的GPU加速技术&#xff0c;以提供高性能的计算能力。NVIDIA推出了多个Jetson系列的产…

成集云 | 企业微信集成用友T+ | 解决方案

源系统成集云目标系统 方案介绍 用友T是一款由用友畅捷通推出的新型互联网企业管理系统&#xff0c;它主要满足成长型小微企业对其灵活业务流程的管控需求&#xff0c;并重点解决往来业务管理、订单跟踪、资金、库存等管理难题。 企业微信是一款通讯与办公工具&#xff0c;具…

NJU操作系统公开课笔记(1)

目录 一.计算机系统概述 二.计算机硬件系统 三.计算机软件系统 四.计算机操作技术的发展 五.计算机OS 1.资源管理的角度 2. 程序控制的角度 3.OS控制计算机的角度 4.人机交互的角度 5.程序接口的角度 6.系统结构的角度 单道批处理系统 多道批处理系统 分时系统 …

【Git学习二】时光回溯:git reset和git checkout命令详解

&#x1f601; 作者简介&#xff1a;一名大四的学生&#xff0c;致力学习前端开发技术 ⭐️个人主页&#xff1a;夜宵饽饽的主页 ❔ 系列专栏&#xff1a;JavaScript小贴士Git等软件工具技术的使用 &#x1f450;学习格言&#xff1a;成功不是终点&#xff0c;失败也并非末日&a…

链路追踪,助您洞悉数据联动分析的奥秘

前言 在当今复杂的分布式系统中&#xff0c;了解请求在不同服务之间的传递路径和性能情况对于系统的性能优化至关重要。链路追踪通过记录和分析请求在系统中的传递路径和性能数据&#xff0c;为实现数据联动分析提供了重要的支持。我们曾谈论观测云提供火焰图能够实现链路追踪…

开发知识点-前端-webpack

webpack技术笔记 一、 介绍二、 下载使用 一、 介绍 Webpack是一个现代 JavaScript 应用程序的静态模块打包器 打包&#xff1a;可以把js、css等资源按模块的方式进行处理然后再统一打包输出 静态&#xff1a;最终产出的静态资源都可以直接部署到静态资源服务器上进行使用 模…

mysql之rsync远程同步

&#xff08;一&#xff09;rsync 1、rsync&#xff1a;是一个开源的快速备份工具&#xff0c;可以在不同主机之间同步整个目录 2、在远程同步中&#xff0c;一个是源端&#xff0c;一个是发起端 &#xff08;1&#xff09;源端负责文件的原始位置&#xff0c;发起端和源端的…

最新随机小姐姐无水印开源版HTML源码

推荐一款高质量的HTML引流源码&#xff0c;适合浏览小姐姐短视频 这款源码具有出色的用户界面设计&#xff0c;给人视觉上的美感 视频播放流畅稳定&#xff0c;给用户带来良好的观影体验 小姐姐们的外貌也非常美丽吸引人 想要浏览精彩的小姐姐短视频&#xff0c;不妨试试这款…

Equifax案例分析与合规性场景实践

在当今数字化时代&#xff0c;数据安全已经成为各个组织和企业亟待解决的问题。尤其是在数据泄露事件不断增多的背景下&#xff0c;保护敏感数据免受非法访问和泄露变得尤为紧迫。为了应对这一挑战&#xff0c;许多组织和企业开始利用密钥管理服务(KMS)来加强其数据安全性&…

易点易动RFID管理系统:年终固定资产盘点的革命

随着现代企业规模的扩大和固定资产数量的增加&#xff0c;年终固定资产盘点成为了一项繁琐而耗时的任务。传统的手工盘点方法不仅效率低下&#xff0c;还容易出现错误和遗漏。为了解决这一难题&#xff0c;易点易动RFID管理系统应运而生。本文将重点介绍易点易动RFID管理系统在…

基于SSM的个人通讯录(有报告)。Javaee项目。

演示视频&#xff1a; 基于SSM的个人通讯录&#xff08;有报告&#xff09;。Javaee项目。 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 项目介绍&#xff1a; 采用M&#xff08;mod…