MySql索引优化案例

SQL优化篇 - MySQL查询select语句优化 使用MySQL,SQL优化,以及工作中实战的操作 阅读详情

单表优化

-- 创建新表
create table article(
    id int unsigned not null primary key auto_increment,
    author_id int unsigned not null,
    category_id int unsigned not null,
    views int unsigned not null,
    comments int unsigned not null,
    title varchar(255) not null,
    content text not null
)character set utf8 collate utf8_general_ci;

--插入数据
insert into article(`author_id`,`category_id`,`views`,`comments`,`title`,`content`) values
(1,1,1,1,'1','1'),
(2,2,2,2,'2','2'),
(1,1,3,3,'3','3');

--查询category_id为1且comments大于1的情况下,views最多的article_id
explain select * from article where category_id=1 and comments>1 order by views desc limit 1;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Vq5NeA3U-1577071571703)(1D74CFA08A514D56904670B06B6D5421)]
type 为 all,且出现文件内排序(using filesort),也没有索引(没建)

-- 建立索引
create index idx_article_views on article(`views`);

-- 再分析
explain select * from article where category_id=1 and comments>1 order by views desc limit 1;

*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: article
   partitions: NULL
         type: index
possible_keys: NULL
          key: idx_article_views
      key_len: 4
          ref: NULL
         rows: 1
     filtered: 33.33
        Extra: Using where; Backward index scan
1 row in set, 1 warning (0.00 sec)

-- 删除索引
drop index idx_article_views on article;

Backward index scan 是反向扫描,反向扫描的性能也是可以的

详细参考大佬文章:https://www.jb51.net/article/143464.htm

双表优化

-- 建表
create table class(
    id int unsigned not null primary key auto_increment,
    card int unsigned not null
)character set utf8 collate utf8_general_ci;

create table book(
    bookid int unsigned not null auto_increment primary key,
    card int unsigned not null
)character set utf8 collate utf8_general_ci;

-- 向两个表中插入随机数据,各插入20行数据
INSERT INTO class(card) VALUES(ROUND(RAND()*100));
INSERT INTO book(`card`) VALUES(ROUND(RAND()*100));

explain select * from class inner join book on class.card=book.card;

*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: class
   partitions: NULL
         type: ALL
possible_keys: NULL
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 20
     filtered: 100.00
        Extra: NULL
*************************** 2. row ***************************
           id: 1
  select_type: SIMPLE
        table: book
   partitions: NULL
         type: ALL
possible_keys: NULL
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 20
     filtered: 10.00
        Extra: Using where; Using join buffer (Block Nested Loop)

rand()函数产生的是0到1之间的随机数

round()表示向下取证

-- 建立索引
create index idx_cc on class(card);
explain select * from book left join class on class.card=book.card\G

*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: book
   partitions: NULL
         type: ALL
possible_keys: NULL
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 20
     filtered: 100.00
        Extra: NULL
*************************** 2. row ***************************
           id: 1
  select_type: SIMPLE
        table: class
   partitions: NULL
         type: ref
possible_keys: idx_cc
          key: idx_cc
      key_len: 4
          ref: demo.book.card
         rows: 1
     filtered: 100.00
        Extra: Using index
2 rows in set, 1 warning (0.00 sec)

这里建立1个索引就可以了,为什么呢?

驱动表的概念,mysql中inner join指定了连接条件时,满足查询条件的记录行数少的表为驱动表;如未指定查询条件,则扫描行数少的为驱动表。

left join 写在左边的是驱动表,join后的是被驱动表

详情参考大佬文章:https://blog.youkuaiyun.com/Crystalqy/article/details/102730959

三个表的关联与双表是类似的,以小表驱动大表

深入后端领域 MySQL 的索引优化案例分析 本文旨在为后端开发者和数据库管理员提供一套完整的MySQL索引优化方法论。索引的底层数据结构和存储原理各种索引类型的适用场景和选择标准执行计划的解读和分析方法复合索引的最左前缀原则索引优化的实际案例和性能对比首先介绍索引的基本概念和原理然后深入分析MySQL索引的底层实现接着讲解索引优化的方法论和工具通过多个实际案例展示优化过程最后总结最佳实践和未来趋势索引(Index):数据库中用于加速查询的数据结构B+树(B+ Tree) 阅读详情

相关推荐

【React Native】源码分析之Native UI的封装和管理

转载请注明出处:http://blog.youkuaiyun.com/u013531824/article/details/54020287,谢谢。  ReactNative作为使用React开发Native应用的新框架,随着时间的增加,无论是社区还是个人对她的兴趣与日递增。此文目的是希望和大家一起欣赏一下ReactNative的部分源码。阅读源码好处多多,让攻城狮更溜的开发ReactNative应用的同时,也

Tiny的专栏 9777

MySQL索引

索引是一个单独的、存储在磁盘上的数据库结构,它们包含着对数据表里所有记录的引用指针。使用索引用于快速找出在某个或多个列中有一特定值的行,所有MySQL列类型都可以被索引,对相关列使用索引是提高查询操作速度的最佳途径。MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。接下来就来了解一下索引的使用吧!

qq_56370103的博客 3825

42、InfiniBand技术详解:QP状态机、操作及错误处理

本文深入解析InfiniBand技术中的核心组件QP(Queue Pair)状态机、工作请求处理机制、支持的操作类型及错误处理策略。详细介绍了QP的创建与状态转换流程,包括INIT、RTR、RTS等关键状态,并提供了状态修改的代码示例。文章还探讨了工作请求的发布、资源使用限制、围栏机制以及重试和RNR流程,帮助开发者理解通信可靠性保障机制。此外,涵盖了多播组的应用场景与API使用方法,并对比了用户空间与内核级RDMA API的调用差异,最后给出了实践建议和常见问题解答,为构建高性能分布式系统提供技术指导。

oauth7security的博客 131

Mysql进阶-Sql优化

1:添加Insert优化: 1). 优化方案一: 批量插入数据: Insert into tb_test values(1,'Tom'),(2,'Cat'),(3,'Jerry'); 最多一次批量插入差不多一千条 就行了 2). 优化方案二 手动控制事务 如果自动。每次操作都会自动创造事务 提交事务 比较消耗性能 手动 一次提交就行 start transaction; insert into tb_test values(1,'Tom'),(2,'Cat'),(3

m0_64702880的博客 2778

基于ENVI完成影像的去云操作以及后续处理

利用ENVI完成重采样影像的去云操作 由于SNAP重采样之后的影像是分波段保存的,ENVI的波段运算工具一次也只能输出一个波段,所以去云的操作分波段进行,原理是掩膜法 下面是打开所有波段后的界面 去云的依据是以quality_scene_classification栅格文件为基础,该文件是哨兵2数据自带的场景质量分类图,包含12个级别,可以通过SNAP软件查看,如下图所示: 对于去云操作而言,我们只需要DARK_FEATURE_SHADOW(地形等),CLOUD_SHADOW(云阴影)、CL

lemon_tttea的博客 2万+

SAP 批次管理(分割评估)

批次分割评估: 业务场景:企业要求各批次物料成本价格不一样。此时可以采用分割批次来实现不同成本 后台配置: (1)、激活分割评估 后台---物料管理----评估与科目设置---分割评估-----激活分割评估 (2)、配置分割评估 后台---物料管理----评估与科目设置---分割评估-----配置分割评估 进入全局性分类后,批次分割采用已有的评估类型“X自动(批)”: ...

willieyuan的博客 1万+

MySQL高级——数据库优化(中)

文章目录二、索引优化分析索引优化索引分析单表建表sql案例优化双表建表sql案例优化三表建表sql案例优化索引失效(应该避免)建表SQL索引失效案例面试题讲解一般性建议 二、索引优化分析 索引优化 索引分析 单表 建表sql CREATE DATABASE db03; use db03; CREATE TABLE IF NOT EXISTS `article` ( `id` INT(10) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, `author_i

小楊同学的笔记本 5331

9、 量子支持向量机:从经典到量子的跨越

本文详细介绍了量子支持向量机(QSVM)的基本原理及其在PennyLane和Qiskit框架中的实现方法。从经典SVM的基础知识出发,逐步深入到量子领域的应用,包括如何定义量子核函数、与scikit-learn集成以及在模拟器和实际量子计算机上的训练和评估过程。最后通过表格和流程图总结了不同框架下的实现要点,为未来量子机器学习的研究提供了参考。

weixin_42433737的博客 183

Mysql explain执行计划详解

explain可以查看sql的执行计划,根据执行计划,可以看出sql慢在哪,方便进行调优。 explain中比较重要的几个字段:type、key、key_len、rows、filtered、Extra。以下列举比较常见的情况 type type取值,一般而言从上到下性能依次降低 system 表中只有一条数据的情况 const 查询条件只有一个值,通过主键或者唯一索引精确匹配一条记录 eq_ref 发生在链表查询中 使用非唯一索引进行关联 ref 连表、不连表都可能发生

azbh111的博客 1495

从零开始用 C# 打造工业级上位机系统:完整项目实战

本文介绍了一个基于C#开发的工业级上位机系统项目。该系统采用分层架构设计,包含通信、数据采集、UI展示、告警日志等模块,支持Modbus协议和串口通信。文章详细阐述了系统架构设计、关键模块实现(如Modbus通信封装、实时数据采集、告警系统等)以及性能优化策略。该项目已在实际工控场景中稳定运行超过1年,具备良好的可扩展性和稳定性,适合有一定C#基础的开发者参考学习工业软件开发实践。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1367

基于深度学习的三维重建算法——详解与实现

随着深度学习技术的迅猛发展,基于深度学习的三维重建算法在最近几年取得了显著的进展。而基于深度学习的三维重建算法通过利用深度神经网络,能够从大规模数据中学习到更准确、鲁棒的三维结构表示。本文综述了基于深度学习的三维重建算法,并给出了相应的源代码。随着深度学习技术的不断发展,我们相信基于深度学习的三维重建算法将会在未来得到更广泛的应用。实验结果表明,基于深度学习的三维重建算法在准确性和鲁棒性方面取得了显著的提升。以上是关于基于深度学习的三维重建算法的详细介绍与实现,希望对您有所帮助。

CyberGenius的博客 1227

【MySQL进阶】索引优化案例

MySQL之索引优化单表索引优化案例 单表索引优化案例 例如:一个 article 表的字段如下: create table article( id int(10) unsigned primary key auto_increment comment '序号', author_id int(10) unsigned not null comment '作者id', category_id int(10) unsigned not null comment '分类id', comments in

Welcome,Everyone. 517

FPGA发展趋势:异构计算、AI加速、可重构计算

FPGA技术正朝着异构计算、AI加速和可重构计算三大方向发展。作为高效能计算平台,FPGA在异构架构中与CPU/GPU协同工作,发挥低延迟、高能效优势;在AI领域通过定制化架构实现边缘推理加速;其硬件可重构特性支持动态适应多样化计算需求。最新进展包括部分可重构技术、智能网卡和边缘AI应用。未来,FPGA将在自适应计算、量子接口和软件定义硬件等领域持续突破,成为异构计算架构的核心组件,推动硬件与软件的深度融合。性能对比显示FPGA在能效比(5-20TOPS/W)和灵活性方面具有显著优势。

2301_79143213的博客 968

MySQL - 索引优化案例实操

文章目录DB VersionTable DB Version mysql> select version(); +------------+ | version() | +------------+ | 5.7.29-log | +------------+ 1 row in set 默认隔离级别 RR 可重复读 Table CREATE TABLE `employees` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar

小工匠 2万+

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

mysql sql 优化案例_MySQL索引优化案例

开发同学或多或少会遇到系统响应慢的问题,除了业务系统本身的问题外,常常会遇到SQL查询慢的问题,这篇文章结合实际案例分析MySQL InnoDB存储引擎的索引优化,这篇文章不会介绍B+树的知识点,如果需要了解聚集索引和辅助索引特点的同学可以参考这篇文章,这篇文章主要会介绍三星索引和ICP优化.如何分析SQL性能首先是查看MySQL的状态,系统是否正常,常用的几个命令如下:#显示状态信息(扩展sho...

weixin_42469191的博客 194

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

MySQL 索引优化实战指南:原理、策略与案例分析

索引是一种数据结构,用于快速定位和访问数据库表中的记录。它类似于书籍的目录,通过在数据表中建立一个额外的结构来存储数据的引用信息,从而加速数据的检索过程。在 MySQL 中,索引是存储在磁盘上的,它与数据表本身是分开存储的,但又与数据表紧密关联。MySQL 支持多种存储引擎,不同的存储引擎使用不同的索引存储结构。最常见的存储引擎是 InnoDB 和 MyISAM,它们分别使用 B+ 树和哈希表作为索引的存储结构。主键索引是一种特殊的唯一索引,它用于唯一标识表中的每一行记录。每个表只能有一个主键索引,主键字段

1102

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

MySql优化(四)索引优化分析(案例分析)

写在前面: 我热爱技术,热爱分享,热爱生活, 我始终相信:技术是开源的,知识是共享的! 博客里面的内容大部分均为原创,是自己日常的学习记录和总结,便于自己在后面的时间里回顾,当然也是希望可以分享自己的知识。目前的内容几乎是基础知识和技术入门,如果你觉得还可以的话不妨关注一下,我们共同进步! 个人除了分享博客之外,也喜欢看书,写一点日常杂文和心情分享,如果你感兴趣,也可以关注关注! 微信公众号:傲骄鹿先生 ...

在路上 2787

Mysql索引优化分析案例

Mysql索引优化分析案例

Jack方 438

MySQL索引优化案例学习总结

目录 一、概述 二、创建表以及初始化数据 三、全值匹配原则 四、最佳左前缀原则 五、避免在索引列上进行任何操作 六、存储引擎不能使用索引中范围条件右边的列 七、尽量使用覆盖索引 八、避免使用不等于 (!= 或者 <>)操作 九、避免使用is null, is not null判空/非空操作 十、谨慎使用like通配符模糊查询 十一、避免隐式类型转换导致索引失效 十二、尽量少用or连接操作 十三、联合索引案例分析 十四、总结 一、概述 我们都知道,索引是一种排好序的

weixiaohuai的博客 871

Mysql之索引优化案例

1.单表简单案例 创建表 CREATE TABLE IF NOT EXISTS `article`( `id` INT(10) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, `author_id` INT (10) UNSIGNED NOT NULL, `category_id` INT(10) UNSIGNED NOT NULL , `views` INT(10) UNSIGNED NOT NULL , `comments` INT(10) UNSIGNE

龙兮 379

groupby索引有效吗_MySQL索引优化案例

开发同学或多或少会遇到系统响应慢的问题,除了业务系统本身的问题外,常常会遇到SQL查询慢的问题,这篇文章结合实际案例分析MySQL InnoDB存储引擎的索引优化,这篇文章不会介绍B+树的知识点,如果需要了解聚集索引和辅助索引特点的同学可以参考这篇文章,这篇文章主要会介绍三星索引和ICP优化.如何分析SQL性能首先是查看MySQL的状态,系统是否正常,常用的几个命令如下:#显示状态信息(扩展sho...

weixin_39637260的博客 157

mysql索引速度事例_MySQL索引优化案例

开发同学或多或少会遇到系统响应慢的问题,除了业务系统本身的问题外,常常会遇到SQL查询慢的问题,这篇文章结合实际案例分析MySQL InnoDB存储引擎的索引优化,这篇文章不会介绍B+树的知识点,如果需要了解聚集索引和辅助索引特点的同学可以参考这篇文章,这篇文章主要会介绍三星索引和ICP优化.如何分析SQL性能首先是查看MySQL的状态,系统是否正常,常用的几个命令如下:#显示状态信息(扩展sho...

weixin_30982425的博客 106

mysql 单索引_MySQL索引优化(索引单表优化案例)

案例#查询 category_id 为1 且 comments 大于 1 的情况下,views 最多的 article_id。执行sql:EXPLAIN SELECT id,author_id FROM article WHERE category_id = 1 AND comments > 1 ORDER BY views DESC LIMIT 1;#结论:很显然,type 是 ALL,即...

weixin_32262035的博客 91

六. MySQL 索引失效与索引优化案例

目录一. 单表优化案例案例1:查询category_id为1,且comments大于1,且views最大的数据的author_id值二. 表连接优化案例两表连接优化案例案例1: 输出所有表中所有数据与book表中book.card=class.card的数据多表连接优化案例表连接优化总结二. 索引使用注意点,与索引失效什么情况下会出现索引失效案例 一. 单表优化案例 表数据 案例1:查询category_id为1,且comments大于1,且views最大的数据的author_id值 select aut

qq_29799655的博客 688

MySQL索引优化案例

MySQL索引优化案例分析 单表优化 CREATE TABLE IF NOT EXISTS article( id INT(10) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, author_id INT(10) UNSIGNED NOT NULL, category_id INT(10) UNSIGNED NOT NULL, views INT(10) UNSIGNED NOT NULL, comments INT(10) UNSIGNED NOT

woshiwjma956的博客 228

MySQL索引优化整合案例实现

目录 1 JOIN优化 1.1 JOIN算法原理 1.2 in和exists函数 2 order by优化 2.1 索引排序 2.2 额外排序 2.3 排序优化 3 索引单表优化案例 3.1. 建表 3.2. 单表索引分析 3.1.1 需求 3.1.2 优化 4 索引多表优化案例

赵广陆 1140
上一篇: MySql-explain
下一篇: MySql索引优化
shell-x
博客等级 码龄7年 16粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值