本文主要给大家简单讲讲MySQL 8.0中跳过扫描成功触发方法,相关专业术语大家可以上网查查或者找一些相关书籍补充一下,这里就不涉猎了,我们就直奔主题吧,希望MySQL 8.0中跳过扫描成功触发方法这篇文章可以给大家带来一些实际帮助。
先来个示例:
mysql>, CREATE TABLE t1 (f1 INT  NOT 空,,f2 INT NOT 空,,PRIMARY 关键(f1, f2)); mysql>, INSERT INTO  t1 价值 ,,,,,,,(1,1),(1、2),(3),(4),(1、5), ,,,,,,,(2,1),(2,2),(2、3),(2、4),(5); mysql>, INSERT INTO  t1 SELECT f1, f2 +, 5,得到t1; mysql>, INSERT INTO  t1 SELECT f1, f2 +, 10,得到t1; mysql>, INSERT INTO  t1 SELECT f1, f2 +, 20,得到t1; mysql>, INSERT INTO  t1 SELECT f1, f2 +, 40,得到t1; mysql>, desc SELECT f1, f2 得到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 在那里,,Using index for skip scan | + - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + 1,row 集,拷贝,1,warning (0.00, sec)
上述跳过扫描过程:
(1)获得第一个不同值的第一个关键部分(f1=1)。
(2)构造范围基于第一和第二关键部件(f1=1和f2比;40)。
(3)执行范围扫描。
(4)得到下一个不同的值的第一个关键部分(f1=2)。
(5)构造范围基于第一和第二关键部件(f1=2和f2比;40)。
(6)执行范围扫描。
跳过扫描触发条件
(1)必须是联合索引
(2)只能是一个表
(3)不能使用不同或group by;
(4) SQL不能回表,即选择列和那里的条件列都要包含在一个索引中
(5)默认optimizer_switch=& # 39; skip_scan=在# 39;开启;
mysql>, desc SELECT distinct f1, f2 得到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 在那里,Using index | + - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + 1,row 集,拷贝,1,warning (0.00,秒) mysql>, desc SELECT /* +, set_var (optimizer_switch=& # 39; skip_scan=从# 39;),*/,f1, f2 得到t1 WHERE f2 祝辞,40; + - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + null null null null null null null null null null null null null null null null null null null null null nullMySQL 8.0中跳过扫描成功触发方法