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()
BEGINDECLARE i INT DEFAULT 0;-- Disable autocommit for the duration of the procedureSET autocommit = 0;-- Start the transactionSTART TRANSACTION;-- 800000 就是80w条数据,这里自己选择创建多少,数据太少也展现不出来索引的作用WHILE i < 800000 DOINSERT 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 transactionCOMMIT;-- Re-enable autocommitSET 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 感谢观看

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

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

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

相关文章

redis运维(八)数据类型(一)字符串

一 字符串 说明&#xff1a; 不需要精通,但是得有一个粗略的认识,然后利用help command查看具体使用仅做记录查询 ① 基础概念 说明&#xff1a; ex是用来收敛内存使用率备注&#xff1a; 早期set是不带ex的默认&#xff1a; 不设置ex,是常驻内存 key和value的命名规范 …

【图数据库实战】HugeGraph架构

一、概述 作为一款通用的图数据库产品&#xff0c;HugeGraph需具备图数据的基本功能&#xff0c;如下图所示。HugeGraph包括三个层次的功能&#xff0c;分别是存储层、计算层和用户接口层。 HugeGraph支持OLTP和OLAP两种图计算类型&#xff0c;其中OLTP实现了Apache TinkerPop3…

【源码系列】短剧系统开发国际版短剧系统软件平台介绍

系统介绍 短剧是一种快节奏、紧凑、有趣的戏剧形式&#xff0c;通过短时间的精彩表演&#xff0c;向观众传递故事的情感和思考。它以其独特的形式和魅力&#xff0c;吸引着观众的关注&#xff0c;成为了当代戏剧娱乐中不可或缺的一部分。短剧每一集都是一个小故事&#xff0c;…

1-2 暴力破解-模拟

模拟&#xff1a;根据题目要求编写代码 可分为&#xff1a;图形排版&#xff08;根据某种规则输出特定图形&#xff09;、日期问题、其他模拟 一.图形排版 1.输出梯形&#xff08;清华大学&#xff09; 法一&#xff1a;等差数列 分析&#xff1a;每行的星号个数为等差数列2n2…

数据结构与算法之美学习笔记:20 | 散列表(下):为什么散列表和链表经常会一起使用?

目录 前言LRU 缓存淘汰算法Redis 有序集合Java LinkedHashMap解答开篇 & 内容小结 前言 本节课程思维导图&#xff1a; 今天&#xff0c;我们就来看看&#xff0c;在这几个问题中&#xff0c;散列表和链表都是如何组合起来使用的&#xff0c;以及为什么散列表和链表会经常…

C++类中public 和 protected 和 private访问权限 struct和class的区别 类成员设置为私有自己控制权限

public 和 protected 和 private访问权限 public 公共权限 类内可以访问 类外可以访问 protected 保护权限 类内可以访问 类外不可以访问 儿子可以访问父亲中的保护内容如父亲的车 private 私有权限 类内可以访问 类外不可以访问 儿子不可以访问父亲的私有权限内容如不想…

Linux 无名管道实现文件复制

无名管道 通过一个管道&#xff08;假象&#xff09;进行传输数据&#xff0c;但是这个管道的传输方式是单工&#xff08;半双工&#xff09;的&#xff0c;就是这个管道允许进行发送和接受数据&#xff0c;不过不能同时进行。 创建无名管道 这里用到一个pipe&#xff08;&…

基于黄金正弦算法优化概率神经网络PNN的分类预测 - 附代码

基于黄金正弦算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于黄金正弦算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于黄金正弦优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神…

Java内存区域速览

文章目录 JVM的组成加载字节码流程 运行时数据区-总览1. 程序计数器2. 虚拟机栈栈帧栈的运行原理 3. 本地方法栈4. 堆内存(Java Heap虚拟机对堆 的划分1. 年轻代&#xff08;Young Generation&#xff09;&#xff1a;2. 老年代&#xff08;Old Generation&#xff09;&#xf…

基于黏菌算法优化概率神经网络PNN的分类预测 - 附代码

基于黏菌算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于黏菌算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于黏菌优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神经网络的光滑…

为什么Go是后端开发的未来

近年来&#xff0c;Go 编程语言的流行度迅速增加。Go 最初由 Google 开发&#xff0c;迅速成为后端开发中最受欢迎的语言之一&#xff0c;特别是在分布式系统和微服务的开发中。本文将讨论为什么 Go 是后端开发的未来。 Go 简介 Go&#xff0c;又称为 Golang&#xff0c;是由…

基于springboot实现私人健身与教练预约管理系统项目【项目源码+论文说明】

基于springboot实现私人健身与教练预约管理系统演示 摘要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应…