新闻详情

新闻详情

首页 / 资讯中心 / 详情

Mysql sql优化篇

发布时间:2026/9/30 7:48:56来源:尧图网络
Mysql sql优化篇
结论1、查询的列不一样优化器用的索引会不一样所以没有用的列尽量去掉。列都在复合索引中查询效率是最高的2、延迟关联也可以大幅提高查询效率。1、单表查询分页时是不错的优化方法。2、单表查询时如果查询的列很多如果索引很多mysql的优化器会选择不同索引这里可以达到稳定最优索引的效果。不需要的列尽量去掉。验证见单表验证例子3、添加复合索引可很大程序提高查询效率表和数据情况mpart 表 130Wcmpart表265W索引show index from mpart; ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | Expression | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | mpart | 0 | PRIMARY | 1 | id | A | 1295051 | NULL | NULL | | BTREE | | | YES | NULL | | mpart | 1 | mpart_INDEX_OBJECTNUMBER | 1 | OBJECTNUMBER | A | 380127 | NULL | NULL | YES | BTREE | | | YES | NULL | | mpart | 1 | mpart_INDEX_EDITTIME | 1 | EDITTIME | A | 177967 | NULL | NULL | YES | BTREE | | | YES | NULL | | mpart | 1 | mpart_INDEX_CREATETIME | 1 | CREATETIME | A | 306052 | NULL | NULL | YES | BTREE | | | YES | NULL | | mpart | 1 | mpart_INDEX_OBJECTDEFID | 1 | OBJECTDEFID | A | 2 | NULL | NULL | YES | BTREE | | | YES | NULL | | mpart | 1 | idx_objdef_createtime | 1 | OBJECTDEFID | A | 2 | NULL | NULL | YES | BTREE | | | YES | NULL | | mpart | 1 | idx_objdef_createtime | 2 | CREATETIME | A | 322896 | NULL | NULL | YES | BTREE | | | YES | NULL | | mpart | 1 | idx_status_mpart | 1 | STATUS | A | 2 | NULL | NULL | YES | BTREE | | | YES | NULL | | mpart | 1 | idx_obj_status_crtime_no_mpart | 1 | OBJECTDEFID | A | 217 | NULL | NULL | YES | BTREE | | | YES | NULL | | mpart | 1 | idx_obj_status_crtime_no_mpart | 2 | STATUS | A | 652 | NULL | NULL | YES | BTREE | | | YES | NULL | | mpart | 1 | idx_obj_status_crtime_no_mpart | 3 | OBJECTNUMBER | A | 374036 | NULL | NULL | YES | BTREE | | | YES | NULL | | mpart | 1 | idx_obj_status_crtime_no_mpart | 4 | CREATETIME | A | 340774 | NULL | NULL | YES | BTREE | | | YES | NULL | | mpart | 1 | idx_obj_status_crtime_mpart | 1 | OBJECTDEFID | A | 2 | NULL | NULL | YES | BTREE | | | YES | NULL | | mpart | 1 | idx_obj_status_crtime_mpart | 2 | STATUS | A | 8 | NULL | NULL | YES | BTREE | | | YES | NULL | | mpart | 1 | idx_obj_status_crtime_mpart | 3 | CREATETIME | A | 315225 | NULL | NULL | YES | BTREE | | | YES | NULL | | mpart | 1 | ft_idx_OBJECTNAME_mpart | 1 | OBJECTNAME | NULL | 1295051 | NULL | NULL | YES | FULLTEXT | | | YES | NULL | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 16 rows in set (0.01 sec)单表验证例子例子1、查询总数0.03sselect count(*) from mpart where CREATETIME STR_TO_DATE(2025-03-01, %Y-%m-%d) and CREATETIME STR_TO_DATE(2025-09-01, %Y-%m-%d) and OBJECTDEFID 52000002539 and status RELEASED and objectnumber like 161%;explain:索引走了idx_obj_status_crtime_no_mpart已是最优中的最优。explain select count(*) from mpart where CREATETIME STR_TO_DATE(2025-03-01, %Y-%m-%d) and CREATETIME STR_TO_DATE(2025-09-01, %Y-%m-%d) and OBJECTDEFID 52000002539 and status RELEASED and objectnumber like 161%; ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | 1 | SIMPLE | mpart | NULL | range | mpart_INDEX_OBJECTNUMBER,mpart_INDEX_CREATETIME,mpart_INDEX_OBJECTDEFID,idx_objdef_createtime,idx_status_mpart,idx_obj_status_crtime_no_mpart,idx_obj_status_crtime_mpart | idx_obj_status_crtime_no_mpart | 694 | NULL | 112038 | 8.67 | Using where; Using index | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 1 row in set, 1 warning (0.00 sec)2、查询所有的数据1.59sselect * from mpart where CREATETIME STR_TO_DATE(2025-03-01, %Y-%m-%d) and CREATETIME STR_TO_DATE(2025-09-01, %Y-%m-%d) and OBJECTDEFID 52000002539 and status RELEASED and objectnumber like 161%;explain:索引走了idx_obj_status_crtime_mpart并不是最优的索引所以延迟关联还是有发挥空间。explain select * from mpart where CREATETIME STR_TO_DATE(2025-03-01, %Y-%m-%d) and CREATETIME STR_TO_DATE(2025-09-01, %Y-%m-%d) and OBJECTDEFID 52000002539 and status RELEASED and objectnumber like 161%; ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | 1 | SIMPLE | mpart | NULL | range | mpart_INDEX_OBJECTNUMBER,mpart_INDEX_CREATETIME,mpart_INDEX_OBJECTDEFID,idx_objdef_createtime,idx_status_mpart,idx_obj_status_crtime_no_mpart,idx_obj_status_crtime_mpart | idx_obj_status_crtime_mpart | 491 | NULL | 84528 | 7.55 | Using index condition; Using where; Using MRR | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 1 row in set, 1 warning (0.00 sec)3、查询所有的数据延时关联0.13sselect p2.* from(select id from mpart where CREATETIME STR_TO_DATE(2025-03-01, %Y-%m-%d) and CREATETIME STR_TO_DATE(2025-09-01, %Y-%m-%d) and OBJECTDEFID 52000002539 and status RELEASED and objectnumber like 161%) p1 inner join mpart p2 on p1.id p2.id;explain:索引走了idx_obj_status_crtime_no_mpart是最优的索引所以不需要的列尽量去掉可以避免优化器选择不同的索引产生效率问题。explain select p2.* from(select id from mpart where CREATETIME STR_TO_DATE(2025-03-01, %Y-%m-%d) and CREATETIME STR_TO_DATE(2025-09-01, %Y-%m-%d) and OBJECTDEFID 52000002539 and status RELEASED and objectnumber like 161%) p1 inner join mpart p2 on p1.id p2.id; --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | 1 | SIMPLE | mpart | NULL | range | PRIMARY,mpart_INDEX_OBJECTNUMBER,mpart_INDEX_CREATETIME,mpart_INDEX_OBJECTDEFID,idx_objdef_createtime,idx_status_mpart,idx_obj_status_crtime_no_mpart,idx_obj_status_crtime_mpart | idx_obj_status_crtime_no_mpart | 694 | NULL | 112038 | 8.67 | Using where; Using index | | 1 | SIMPLE | p2 | NULL | eq_ref | PRIMARY | PRIMARY | 4 | springdb.mpart.id | 1 | 100.00 | NULL | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 2 rows in set, 1 warning (0.00 sec)4、分页查询分页是肯定能提高效率特别是后面的页。1、不延时关联1.47sselect * from mpart where CREATETIME STR_TO_DATE(2025-03-01, %Y-%m-%d) and CREATETIME STR_TO_DATE(2025-09-01, %Y-%m-%d) and OBJECTDEFID 52000002539 and status RELEASED and objectnumber like 161% limit 1500,20;explain:索引走了idx_obj_status_crtime_mpart使用了索引下推等。explain select * from mpart where CREATETIME STR_TO_DATE(2025-03-01, %Y-%m-%d) and CREATETIME STR_TO_DATE(2025-09-01, %Y-%m-%d) and OBJECTDEFID 52000002539 and status RELEASED and objectnumber like 161% limit 1500,20; ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | 1 | SIMPLE | mpart | NULL | range | mpart_INDEX_OBJECTNUMBER,mpart_INDEX_CREATETIME,mpart_INDEX_OBJECTDEFID,idx_objdef_createtime,idx_status_mpart,idx_obj_status_crtime_no_mpart,idx_obj_status_crtime_mpart | idx_obj_status_crtime_mpart | 491 | NULL | 84528 | 7.55 | Using index condition; Using where; Using MRR | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------2、延时关联0.05sselect p2.* from(select id from mpart where CREATETIME STR_TO_DATE(2025-03-01, %Y-%m-%d) and CREATETIME STR_TO_DATE(2025-09-01, %Y-%m-%d) and OBJECTDEFID 52000002539 and status RELEASED and objectnumber like 161% limit 1500,20) p1 inner join mpart p2 on p1.id p2.id;explain:1、这里的id发现出现了2优化执行。索引用了idx_obj_status_crtime_no_mpartrows:112038Extra:使用了索引速度更快。2、查询出了20条数据的id再根据id支p2查询所有的字段减少回表。p2,typeeq_ref走了主键索引。explain select p2.* from(select id from mpart where CREATETIME STR_TO_DATE(2025-03-01, %Y-%m-%d) and CREATETIME STR_TO_DATE(2025-09-01, %Y-%m-%d) and OBJECTDEFID 52000002539 and status RELEASED and objectnumber like 161% limit 1500,20) p1 inner join mpart p2 on p1.id p2.id; ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | 1 | PRIMARY | derived2 | NULL | ALL | NULL | NULL | NULL | NULL | 1520 | 100.00 | NULL | | 1 | PRIMARY | p2 | NULL | eq_ref | PRIMARY | PRIMARY | 4 | p1.id | 1 | 100.00 | NULL | | 2 | DERIVED | mpart | NULL | range | mpart_INDEX_OBJECTNUMBER,mpart_INDEX_CREATETIME,mpart_INDEX_OBJECTDEFID,idx_objdef_createtime,idx_status_mpart,idx_obj_status_crtime_no_mpart,idx_obj_status_crtime_mpart | idx_obj_status_crtime_no_mpart | 694 | NULL | 112038 | 8.67 | Using where; Using index | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------3、只是查询需要列 0.03sselect id, objectnumber, OBJECTDEFID, status, CREATETIME from mpart where CREATETIME STR_TO_DATE(2025-03-01, %Y-%m-%d) and CREATETIME STR_TO_DATE(2025-09-01, %Y-%m-%d) and OBJECTDEFID 52000002539 and status RELEASED and objectnumber like 161% limit 1500,20;explain:1、速度最快不需要回表。索引走了idx_obj_status_crtime_no_mpartExtra:使用了索引注意这是理想状态。但是实际应用中往往覆盖索引和查询字段会有一定的出入。explain select id, objectnumber, OBJECTDEFID, status, CREATETIME from mpart where CREATETIME STR_TO_DATE(2025-03-01, %Y-%m-%d) and CREATETIME STR_TO_DATE(2025-09-01, %Y-%m-%d) and OBJECTDEFID 52000002539 and status RELEASED and objectnumber like 161% limit 1500,20; ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | 1 | SIMPLE | mpart | NULL | range | mpart_INDEX_OBJECTNUMBER,mpart_INDEX_CREATETIME,mpart_INDEX_OBJECTDEFID,idx_objdef_createtime,idx_status_mpart,idx_obj_status_crtime_no_mpart,idx_obj_status_crtime_mpart | idx_obj_status_crtime_no_mpart | 694 | NULL | 112038 | 8.67 | Using where; Using index | -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------5、只是查询需要列0.03s最快了没有任何回表。select id, objectnumber, OBJECTDEFID, status, CREATETIME from mpart where CREATETIME STR_TO_DATE(2025-03-01, %Y-%m-%d) and CREATETIME STR_TO_DATE(2025-09-01, %Y-%m-%d) and OBJECTDEFID 52000002539 and status RELEASED and objectnumber like 161%;0.04s,这里延迟关联多了一次回表所以慢了一丢丢select p2.id, p2.objectnumber, p2.OBJECTDEFID, p2.status, p2.CREATETIME from(select id from mpart where CREATETIME STR_TO_DATE(2025-03-01, %Y-%m-%d) and CREATETIME STR_TO_DATE(2025-09-01, %Y-%m-%d) and OBJECTDEFID 52000002539 and status RELEASED and objectnumber like 161%) p1 inner join mpart p2 on p1.id p2.id;
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

mercury-agent源码构建教程:从Bun编译独立二进制到跨平台发布的完整指南 2026/9/30 13:54:30

mercury-agent源码构建教程:从Bun编译独立二进制到跨平台发布的完整指南

mercury-agent源码构建教程:从Bun编译独立二进制到跨平台发布的完整指南 【免费下载链接】mercury-agent Soul-driven AI agent with permission-hardened tools, token budgets, and multi-channel access. Runs 24/7 from CLI, Telegram or More. 项目地址: htt…

阅读更多 →
大厂 AI 应用工程师核心技术栈梳理|Transformer、Agent 编排、向量检索、FastAPI 工程落地 2026/9/30 13:54:23

大厂 AI 应用工程师核心技术栈梳理|Transformer、Agent 编排、向量检索、FastAPI 工程落地

前言:AI 应用工程师的角色定位 在 2026 年的大厂技术体系中,AI 应用工程师已成为连接大模型能力与业务价值的关键角色。与专注模型训练和架构创新的算法工程师不同,AI 应用工程师的核心使命是基于现有大模型能力,构建可靠、高效、…

阅读更多 →
华为昇腾芯片命名规则与Atlas算力产品体系全解析(从910C到950DT/960DT) 2026/9/30 13:54:03

华为昇腾芯片命名规则与Atlas算力产品体系全解析(从910C到950DT/960DT)

华为昇腾芯片命名规则与 Atlas 算力产品体系全解析(从 910C 到 950DT/960DT)声明:本文作为笔者个人备忘的文章,不喜勿喷。 基于公开资料整理(华为官方、公众号、知乎/社区、券商研报等,2026-09&#xff09…

阅读更多 →
2026 年 9 月 AI 算力产业链全景梳理:从 2nm 制程涨价到国产 50 万卡集群 2026/9/30 13:54:02

2026 年 9 月 AI 算力产业链全景梳理:从 2nm 制程涨价到国产 50 万卡集群

摘要:本文从制程与封装、芯片、算力中心、成本传导四个维度,梳理 2026 年 9 月 AI 算力产业链的关键事件与趋势变量,重点拆解算力定价权、国产芯片集群化与对华供应预期三条主线。文中内容均来自公开行业资料,仅作产业技术层面观察…

阅读更多 →
AI算法落地实战:从模型训练到边缘部署的全链路工程指南 2026/9/30 13:54:02

AI算法落地实战:从模型训练到边缘部署的全链路工程指南

简介:本资源是2024年第六届全球校园人工智能算法精英大赛的官方赛题解析与参与指南,面向高校学生、AI方向教师及算法竞赛爱好者,旨在系统解决备赛过程中对赛题理解不清、解题路径不明、评价标准模糊等核心问题。内容覆盖AI生成人脸图像鉴别、…

阅读更多 →
2026常州代理记账托管靠谱吗?本地代账机构盘点对比与鉴别方法 2026/9/30 13:53:56

2026常州代理记账托管靠谱吗?本地代账机构盘点对比与鉴别方法

把记账报税托管给代理记账机构,对很多中小微企业来说是省事的选择,但省事不等于撒手不管。托管前不做功课、托管中不跟进、托管后不复盘,出了问题再补救往往要花更大代价。第一次托管的企业常以为签完合同交完票就完事了,结果后面…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉