MySQL 8.0中skip scan成功触发方法
发表于:2025-11-09 作者:千家信息网编辑
千家信息网最后更新 2025年11月09日,本文主要给大家简单讲讲MySQL 8.0中skip scan成功触发方法,相关专业术语大家可以上网查查或者找一些相关书籍补充一下,这里就不涉猎了,我们就直奔主题吧,希望MySQL 8.0中skip s
千家信息网最后更新 2025年11月09日MySQL 8.0中skip scan成功触发方法
本文主要给大家简单讲讲MySQL 8.0中skip scan成功触发方法,相关专业术语大家可以上网查查或者找一些相关书籍补充一下,这里就不涉猎了,我们就直奔主题吧,希望MySQL 8.0中skip scan成功触发方法这篇文章可以给大家带来一些实际帮助。
先来个示例:
mysql> CREATE TABLE t1 (f1 INT NOT NULL, f2 INT NOT NULL, PRIMARY KEY(f1, f2));mysql> INSERT INTO t1 VALUES -> (1,1), (1,2), (1,3), (1,4), (1,5), -> (2,1), (2,2), (2,3), (2,4), (2,5);mysql> INSERT INTO t1 SELECT f1, f2 + 5 FROM t1;mysql> INSERT INTO t1 SELECT f1, f2 + 10 FROM t1;mysql> INSERT INTO t1 SELECT f1, f2 + 20 FROM t1;mysql> INSERT INTO t1 SELECT f1, f2 + 40 FROM t1;mysql> desc SELECT f1, f2 FROM t1 WHERE f2 > 40;+----+-------------+-------+------------+-------+---------------+---------+---------+------+------+----------+----------------------------------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+-------+------------+-------+---------------+---------+---------+------+------+----------+----------------------------------------+| 1 | SIMPLE | t1 | NULL | range | PRIMARY | PRIMARY | 8 | NULL | 53 | 100.00 | Using where; Using index for skip scan |+----+-------------+-------+------------+-------+---------------+---------+---------+------+------+----------+----------------------------------------+1 row in set, 1 warning (0.00 sec)
上述skip scan过程:
(1)Get the first distinct value of the first key part (f1 = 1).
(2)Construct the range based on the first and second key parts (f1 = 1 AND f2 > 40).
(3)Perform a range scan.
(4)Get the next distinct value of the first key part (f1 = 2).
(5)Construct the range based on the first and second key parts (f1 = 2 AND f2 > 40).
(6)Perform a range scan.
skip scan触发条件
(1)必须是联合索引
(2)只能是一个表
(3)不能使用distinct或group by ;
(4)SQL不能回表,即select列和where条件列都要包含在一个索引中
(5)默认optimizer_switch='skip_scan=on'开启;
mysql> desc SELECT distinct f1,f2 FROM t1 WHERE f2 > 40;+----+-------------+-------+------------+-------+---------------+---------+---------+------+------+----------+--------------------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+-------+------------+-------+---------------+---------+---------+------+------+----------+--------------------------+| 1 | SIMPLE | t1 | NULL | index | PRIMARY | PRIMARY | 8 | NULL | 160 | 33.33 | Using where; Using index |+----+-------------+-------+------------+-------+---------------+---------+---------+------+------+----------+--------------------------+1 row in set, 1 warning (0.00 sec)mysql> desc SELECT /*+ set_var(optimizer_switch='skip_scan=off') */ f1, f2 FROM t1 WHERE f2 > 40;+----+-------------+-------+------------+-------+---------------+---------+---------+------+------+----------+--------------------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+-------+------------+-------+---------------+---------+---------+------+------+----------+--------------------------+| 1 | SIMPLE | t1 | NULL | index | NULL | PRIMARY | 8 | NULL | 160 | 33.33 | Using where; Using index |+----+-------------+-------+------------+-------+---------------+---------+---------+------+------+----------+--------------------------+1 row in set, 1 warning (0.00 sec)mysql> desc select dept_no,emp_no from dept_emp2 where emp_no>30000;+----+-------------+-----------+------------+-------+---------------+-------------+---------+------+--------+----------+----------------------------------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+-----------+------------+-------+---------------+-------------+---------+------+--------+----------+----------------------------------------+| 1 | SIMPLE | dept_emp2 | NULL | range | ix_dept_emp | ix_dept_emp | 16 | NULL | 110324 | 100.00 | Using where; Using index for skip scan |+----+-------------+-----------+------------+-------+---------------+-------------+---------+------+--------+----------+----------------------------------------+1 row in set, 1 warning (0.00 sec)mysql> desc select dept_no,emp_no,to_date from dept_emp2 where emp_no>30000;+----+-------------+-----------+------------+------+---------------+------+---------+------+--------+----------+-------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+-----------+------------+------+---------------+------+---------+------+--------+----------+-------------+| 1 | SIMPLE | dept_emp2 | NULL | ALL | NULL | NULL | NULL | NULL | 331008 | 33.33 | Using where |+----+-------------+-----------+------------+------+---------------+------+---------+------+--------+----------+-------------+1 row in set, 1 warning (0.00 sec)
MySQL 8.0中skip scan成功触发方法就先给大家讲到这里,对于其它相关问题大家想要了解的可以持续关注我们的行业资讯。我们的板块内容每天都会捕捉一些行业新闻及专业知识分享给大家的。
成功
方法
专业
条件
索引
行业
专业知识
主题
书籍
内容
实际
新闻
术语
板块
知识
示例
篇文章
资讯
过程
问题
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
服务器磁盘阵列代号
三丰云免费服务器是gpu吗
云服务器与虚拟技术的关系
哪个学校有软件开发
北京金山云网络技术有限公司简介
车路协同系统服务器搭建
海康服务器硬件
内蒙古呼和浩特互联网科技
网络安全问题的讨论和对策
数据库sequence循环
数据库的正则怎么用
为什么战塔英雄服务器不稳定
网络安全性排名
应当立即启动网络安全
软件开发单位增值税
广宗网络安全保障工作部署会
国产分布式数据库 logo
社区国家网络安全宣传
丝路互联网电子科技有限公司
网络技术篇
梦幻西游服务器玩法
简易的语音对讲软件开发
破天单机服务器配置
网络安全一级违规行为包括哪些
服务器中的文件打不开怎么办
win服务器系统哪个版本好用
python添加数据库
商家对网络安全
acdsee数据库大小
小型机与x86服务器