查询优化之单表查询
建表
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 NULL,
`title` VARBINARY(255) NOT NULL,
`content` TEXT NOT NULL
);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');SELECT * FROM article;

例题
- 查询 category_id 为1 且 comments 大于 1 的情况下,views 最多的 article_id
一般
我们一般会使用以下语句查询
EXPLAIN SELECT id,author_id FROM article WHERE category_id = 1 AND comments > 1 ORDER BY views DESC LIMIT 1;

这个sql语句的type是all,并且Extra里面出现了Using filesort,这个必须优化
添加索引
CREATE INDEX idx_article_ccv ON article(category_id,comments,views);
我们再次进行上面语句的查询
EXPLAIN SELECT id,author_id FROM article WHERE category_id = 1 AND comments > 1 ORDER BY views DESC LIMIT 1;

我们可以看到type变成了range,但是extra里面却是Using filesort ,这个性能有点差
优化索引
BTree 索引的工作原理
- 他会先排序category_id
- 遇到相同的category_id 在排序comments
- 遇到相同的comments 在排序views
在上面语句中comments > 1 是一个范围值(所谓range),range 类型查询字段后面的索引无效,所以MySQL 无法利用索引再对后面的 views 部分进行检索
进行优化
- 我们删除索引后进行新建索引
DROP INDEX idx_article_ccv ON article;
- 新建索引
CREATE INDEX idx_article_cv ON article(category_id,views);
- 执行slq语句
EXPLAIN SELECT id,author_id FROM article WHERE category_id = 1 AND comments > 1 ORDER BY views DESC LIMIT 1;

我们发现type变成了ref,也没有存在Using filesort了
相关文章:
查询优化之单表查询
建表 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 NULL, title VARBI…...
ChatGPT写小论文
ChatGPT写小论文 只是个人对写小论文心得?从知乎,知网自己总结的,有问题,可以留个言我改一下 文章目录 ChatGPT写小论文-1.写论文模仿实战(狗头)0.论文组成1.好论文前提:2.标题3.摘要4.关键词5.概述6.实验数据、公式或者设计7.结论,思考8.参考文献 0.模仿1.喂大纲…...
公共资源包发布流程详解
文章目录 公有包发布并使用npm安装git仓库协议创建及使用 npm 私有包创建及使用 group npm 私有包私有仓账密存放位置 当公司各个系统都需要使用特定的业务模块时,这时候将代码抽离,发布到 npm 上,供下载安装使用,是个比较好的方案…...
设计模式简谈
设计模式是我们软件架构开发中不可缺失的一部分,通过学习设计模式,我们可以更好理解的代码的结构和层次。 设计原则 设计原则是早于设计方法出现的,所以的设计原则都要依赖于设计方法。这里主要有八个设计原则。 推荐一个零声学院免费教程&…...
day35—选择题
文章目录 1.把逻辑地址转换程物理地址称为(B)2.在Unix系统中,处于(C)状态的进程最容易被执行3. 进程的控制信息和描述信息存放在(B)4.当系统发生抖动(thrashing)时,可以采取的有效措…...
mybatis的<foreach>标签使用
记录:419 场景:使用MyBatis的<foreach></foreach>标签的循环遍历List类型的入参。使用collection属性指定List,item指定List中存放的对象,separator指定分割符号,open指定开始字符,close指定结…...
干货 | 被抑郁情绪所困扰?来了解CBT吧!
Hello,大家好! 这里是 壹脑云科研圈 ,我是 喵君姐姐~ 我们的情绪就像是一组正弦波,有情绪很高涨的时刻,也会有情绪低落的瞬间,也会有情绪平稳的时候。 这种情绪上的变化非常正常,也正是因为这…...
每日一个小技巧:1招教你手机消除笔怎么用
在日常生活中,我们经常需要在手机上进行编辑和涂改,但是由于各种原因,我们可能会做出错误或者不满意的修改。这时候,消除笔就派上用场了。消除笔可以帮助我们在不影响其他内容的前提下,对错误或者不满意的修改进行撤销…...
4月26号软件更新资讯合集....
Tpflow V7.0.2,PHP 工作流引擎新版发布 欢迎使用 Tpflow V7.0.1 工作流引擎 TpFlow 工作流引擎是一套规范化的流程管理系统,基于业务而驱动系统生命力的一套引擎。彻底释放整个信息管理系统的的活力,让系统更具可用性,智能应用型…...
尚硅谷大数据项目【电商数仓5.0】学习笔记
尚硅谷大数据项目【电商数仓5.0】学习笔记 大数据学习基础 基础shell编程:大数据之基础shell 集群快速安装教程:大数据集群快速安装教程 注:如果您已经有大数据学习基础,可以通过上面教程快速搭建学习环境,如果您没…...
vue3配置router路由并实现页面跳转
1、安装vue-router 用vue3需要安装版本4.0以上的vue-router,安装命令: npm install vue-routernext --savevue2尽量安装4.0以下版本,安装命令: npm i vue-router3.1.3在package.json中可以查看vue-router版本号: 2、…...
Java中字符串的初始化详解
前言 在深入学习字符串类之前,我们先搞懂JVM是怎样处理新生字符串的。当你知道字符串的初始化细节后,再去写String s "hello"或String s new String("hello")等代码时,就能做到心中有数。 首先得搞懂字符串常量池的概…...
面向对象(七)-- 代码块
目录 1. 代码块的概述 2. 代码块的分类 3. 代码块的执行优先级 1. 代码块的概述 在Java中,使用 { } 括起来的代码被称为代码块 2. 代码块的分...
《编程思维与实践》1037.一元多项式乘法
《编程思维与实践》1037.一元多项式乘法 题目 思路 比较容易想到将步骤分为三步: 1.读取多项式每项的系数(coefficient)和对应的指数(dim); 2.进行多项式乘法; 3.输出进行多项式乘法后的非零项系数. 其中多项式乘法可以通过循环来处理,输出可以用if来判断系数是否为0,需要考虑…...
top命令学习
文章目录 一、top命令回显信息含义1、第一行2、第二行3、第三行4、第四行5、第五行6、第六行进程信息 二、top简单交互1、按数字“1”,显示列出所有cpu的信息2、按“M”,按内存使用率从大到小排序3、按“P”,按CPU使用率从大到小排序 一、top…...
PHP数组的功能及实现案例
目录 前言 一、什么是数组 二、创建关联数组 1.1运行流程(思想) 1.2代码段 1.3运行截图 三、创建索引数组 1.1运行流程(思想) 1.2代码段 1.3运行截图 前言 1.若有选择,可实现在目录里进行快速查找ÿ…...
Cesium实践(4)——空间数据加载
文章目录 前言几何形体点线面体 标签文字图标 几何文件GeoJsonKMLCZML 三维模型总结 前言 本文介绍Cesium如何加载空间数据,空间数据即明确定义在三维空间中的数据,空间数据包括以下几类:1、几何形体(点、线、面、体)…...
FreeRTOS(三)——应用开发(一)
文章目录 0x01 FreeRTOS文件夹FreeRTOSConfig.h文件内容上面定义的宏决定FreeRTOS.h文件中的定义0x02 创建任务创建静态任务过程configSUPPORT_STATIC_ALLOCATION创建动态任务过程configSUPPORT_DYNAMIC_ALLOCATION 0x03 FreeRTOS启动流程启动流程概述 0x04 任务管理任务调度器…...
这些 Linux 的自动化技巧,教你轻松完成任务
linux 系统的 web 网站在运营状态时,我们常需要对网站进行维护,例如查看资源剩余并做出响应、日志分割、数据整理,在特定状态执行特定任务等等,这些都会需要 linux能实现自动执行某些任任务。本篇博文介绍如何进行常见的linux自动…...
PAL制搜台
PAL电视制式 PAL电视制式(Phase Alternating Line)采用625线制式,视讯制式采用PAL-B/G、PAL-D/K、PAL-I等。PAL电视不像NTSC制式有中心频点,它采用宽带的频率范围进行电视信号的调制和传输。 PAL电视制式频率 PAL电视采用UHF(超高频)和VHF(甚高频)两个频段进行电视信号的传输…...
在快马平台快速搭建transformer文本分类原型,验证注意力机制
在深度学习领域,transformer架构已经成为自然语言处理(NLP)任务的核心工具。最近我在尝试搭建一个基于transformer的文本分类模型原型,用来验证注意力机制的效果。整个过程比想象中顺利得多,尤其是在InsCode(快马)平台…...
ReefwingLSM9DS1库:面向nRF52840的九轴IMU同步驱动
1. ReefwingLSM9DS1库概述:面向Arduino Nano 33 BLE的LSM9DS1九轴IMU驱动实现ReefwingLSM9DS1是一个专为Arduino Nano 33 BLE硬件平台优化的C类库,用于驱动STMicroelectronics出品的LSM9DS1高精度九轴惯性测量单元(Inertial Measurement Unit…...
Claude Code每日更新速览(v2.1.90)-2026/04/02
本文前言: Claude Code 的进化速度,已经到了一种让人来不及消化的程度。根据 github.com/anthropics/claude-code/blob/main/CHANGELOG.md 获取最新的变更,跟紧 Claude Code新功能、新趋势。最新版本:v2.1.90提交时间:…...
ENVI实战:利用传感器波谱响应函数实现光谱曲线精准重采样
1. 为什么需要光谱重采样? 在遥感数据分析中,我们经常会遇到一个头疼的问题:不同传感器采集的光谱数据分辨率不一致。比如实验室用光谱仪测量的叶片反射率可能有上千个波段,而Landsat-8卫星只能获取11个波段的数据。这就好比用高清…...
智能制造企业数字化转型智慧工厂建设方案:涵盖研发、供应、生产、销售、服务五大核心环节的智慧工厂建设路径
该方案围绕研发、供应、生产、销售、服务全价值链,融合AI、大数据、5G等技术,通过智能优化、智慧供应链、智能质检、数字孪生及精准营销等模块,构建全链路智慧工厂,实现降本增效与制造企业全面数字化转型。 该方案以“研发—供应…...
Claude Code助手对比:百川2-13B在代码生成与解释方面的能力展示
Claude Code助手对比:百川2-13B在代码生成与解释方面的能力展示 最近和几个做开发的朋友聊天,大家讨论最多的就是AI编程助手到底哪个更好用。Claude Code的名气确实很大,很多技术社区都在讨论它。不过,除了这些“明星”选手&…...
3分钟破解百度网盘提取码难题:智能解析工具完全指南
3分钟破解百度网盘提取码难题:智能解析工具完全指南 【免费下载链接】baidupankey 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 还在为百度网盘加密资源的提取码而烦恼吗?每次点击分享链接却卡在"请输入提取码"的弹窗前…...
OpenClaw+Qwen3-14b_int4_awq自动化写作:从资料收集到排版发布
OpenClawQwen3-14b_int4_awq自动化写作:从资料收集到排版发布 1. 为什么需要自动化写作工作流 作为一个技术博主,我经常面临这样的困境:明明有大量想分享的内容,却总被繁琐的写作流程拖累。从资料收集、大纲梳理到内容生成和格式…...
告别复杂配置!Phi-3-Mini-128K一键部署实测:7GB显存跑通,小白也能玩转大模型
告别复杂配置!Phi-3-Mini-128K一键部署实测:7GB显存跑通,小白也能玩转大模型 1. 为什么选择Phi-3-Mini-128K 如果你正在寻找一个既强大又轻量的大语言模型,Phi-3-Mini-128K绝对值得考虑。这个由微软开发的模型虽然只有3.8亿参数…...
实战指南:基于同一份OpenSpec,用快马平台同步生成前后端代码,确保联调无忧
最近在开发一个电商平台时,我们团队遇到了前后端联调效率低下的问题。由于接口文档和实际代码存在差异,经常出现前端调用参数和后端接收不一致的情况。后来我们发现,基于OpenSpec规范同步生成前后端代码可以完美解决这个问题,这里…...
