当前位置:网站首页>sql优化
sql优化
2022-08-10 03:18:00 【你的小伙伴啊】
目录
一、EXPLAIN 解释
1.Type
EXPLAIN执行计划中type字段分为以下几种:
ALL
INDEX
RANGE
REF
EQ_REF
CONST,SYSTEM
NULL
自上而下,性能从最差到最好
表结构如下:
CREATE TABLE `film` (
`id` int(4) NOT NULL AUTO_INCREMENT,
`title` varchar(255) DEFAULT NULL,
`name` varchar(255) DEFAULT NULL,
`remark` varchar(255) DEFAULT NULL,
`rating` int(4) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_title` (`title`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;
CREATE TABLE `payment` (
`id` int(4) NOT NULL AUTO_INCREMENT,
`customer_id` int(4) DEFAULT NULL,
`remark` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_fk_customer_id` (`customer_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ALL
type = ALL,全表扫描,MYSQL扫描全表来找到匹配的行
(因为film表中rating不是索引)
explain select * from film where rating > 9;
index
type = index,索引全扫描,MYSQL遍历整个索引来查找匹配的行。(虽然where条件中没有用到索引,但是要取出的列title是索引包含的列,所以只要全表扫描索引即可,直接使用索引树查找数据)
explain select title from film;
range
type = range ,索引范围扫描,常见于<、<=、>、>=、between等操作符(因为customer_id是索引,所以只要查找索引的某个范围即可,通过索引找到具体的数据)
explain select * from payment where customer_id > 300 and customer_id < 350;
ref
type = ref ,使用非唯一性索引或者唯一索引的前缀扫描,返回匹配某个单独值的记录行。
(1)使用非唯一性索引customer_id单表查询
explain select * from payment where customer_id = 350;
2.一些实例
表结构如下:
CREATE TABLE `term_mac_iptv_info` (
`BUSI_ID` varchar(50) NOT NULL COMMENT '业务编号',
`MKT_RES_NBR` varchar(50) DEFAULT NULL COMMENT '营销资源编码',
`TERM_CODE` varchar(50) DEFAULT NULL COMMENT '串码',
`MAC_ID` varchar(50) DEFAULT NULL COMMENT 'MAC地址',
`ACTION` int(1) DEFAULT NULL COMMENT '动作 1 新增 2-删除',
`USER_ID` bigint(16) DEFAULT NULL COMMENT '用户ID',
`CREATE_DATE` datetime DEFAULT NULL COMMENT '创建时间',
`DEAL_COUNT` int(1) DEFAULT NULL COMMENT '处理次数',
`RETURN_CODE` varchar(30) DEFAULT NULL COMMENT '返回码',
`RETURN_MSG` varchar(2000) DEFAULT NULL COMMENT '返回描述',
`SEND_PLATFORM` int(1) DEFAULT NULL COMMENT '对端平台 1.华为 2.中兴',
`STATUS_CD` int(1) DEFAULT NULL COMMENT '处理状态 0-未处理 1-处理成功 2-处理失败 3-处理中',
`UPDATE_DATE` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`BUSI_ID`),
KEY `INDX_TERM_MAC_IPTV_INFO_TERM_CODE` (`TERM_CODE`),
KEY `INDX_TERM_MAC_IPTV_INFO_MAC_ID` (`MAC_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='IPTV同步中兴华为';
-- 没有where 取出的title不是索引字段,走全表扫描
explain select action from term_mac_iptv_info;
-- 没有where 但是要取出的title mac_id是索引列,所以还是会走索引
explain select mac_id from term_mac_iptv_info;
-- 没有where 要取出的title包含非索引列,所以不会走索引,此时全表扫描
explain select mac_id,action from term_mac_iptv_info;
边栏推荐
- 请教各位confluence部署连接数据库成功,但是在后面建表设置的时候报错
- Difference between netstat and ss command
- How to write a high-quality test case?
- 网路编程_调试accept
- goland console shows overlapping problem solution
- 全面深入了解什么是反向代理和负载均衡
- 驱动程序开发:按键中断之异步通知
- Flink CDC 2.0及其他数据同步工具对比
- (面试加分新技能) 总结11个ES2022中你可能遗漏的语法
- The same is a primary test, why does he pay 5,000 yuan more than me?
猜你喜欢
随机推荐
ARP欺骗-教程详解
applet wxs
HACKTHEBOX——Bank
如何快速成为一名软件测试工程师?测试员月薪15k需要什么技术?
Shell 文本三剑客 awk
树的介绍、树的定义和基本术语、二叉树的定义和性质、二叉树的顺序表示与实现和链式表示与实现以及树的遍历方法以及两种创建方式
Research on IC enterprises
shell文本编辑awk
高精度加法
...spread、命名空间、假报错、变化事件、async/await
Leetcode 47 全排列Ⅱ
Example 047: Functions Swap Variables
How to quickly become a software test engineer?What skills do testers need for a monthly salary of 15k?
The same is a primary test, why does he pay 5,000 yuan more than me?
常用类以及接口
proxy代理服务
Arrays类
【每日一题】大佬们进来看看吧
Flink CDC 2.0及其他数据同步工具对比
NFG电商系统在元宇宙趋势下做什么?