回表是什么意思 汽车油表出现回表现象是怎么回事
篮球裁判通过回放,判断比赛应该还剩下0.5秒,就叫回表0.5秒。如果球权在进攻方手中(防守方脚踢球违例除外),没有发生球权转换。则不会回表。如果是防守方犯规或者脚踢球违例出界,如果在后场发球,则回表到24秒。
文章目录:
一、汽车油表出现回表现象是怎么回事
1、每次都有这一现象,可能是油表有自检源罩功能,或者油表巧旦采集信号的方式没考虑油面晃动因素是设计缺陷;
2、偶然发生,应该是燃油传感器卡滞或燃油雹宽闹泵安装位置不当有干涉。
二、回表与覆盖索引,索引下推
通俗的讲就是,如果索引的列在 select 所需获得的列中(因为在 mysql 中索引是根据索引列的值进行排序的,所以索引节点中存在该列中的部分值)或者根据一次索引查询就能获得记录就不需要回表,如果 select 所需获得列中有大量的非索引列,索引就需要到表中找到相应的列的信息,这就叫回表。
InnoDB聚集索引的叶子节点存储行记录,因此, InnoDB必须要有,且只有一个聚集索引:
(1)如果表定义了主键,则PK就是聚集索引;
(2)如果表没有定义主键,则第一个非空唯一索引(not NULL unique)列是聚集索引;
(3)否则,InnoDB会创建一个隐藏的row-id作为聚集索引;
先创建一张表,sql 语句如下:
然后,我们再执行下面的 SQL 语句,插入几条测试数据。
假设,现在我们要查询出 id 为 2 的数据。那么执行 select * from xttblog where ID = 2; 这条 SQL 语句就不需要回表。原因是根据主键的查询方式,则只需要搜索 ID 这棵 B+ 树。主键是唯一的,根据这个唯一的索引,MySQL 就能确定搜索的记录。
但当我们使用 k 这个索引来查询 k = 2 的记录时就要用到回表。select * from xttblog where k = 2; 原因是通过 k 这个普通索引查询方式,则需要先搜索 k 索引树,然后得到主键 ID 的值为 1,再到 ID 索引树搜索一次。这个过程虽然用了索引,但实际上底层进行了两次索引查询,这个过程就称为回表。
也就是说,基于非主键索引的查询需要多扫描一棵索引树。因此,我们在应用中应该尽量使用主键查询。
我这里表里的数据量比较少,如果数据量大的话,你能很明显的看出两次查询所用的时间,很明显使用主键查询效率更高。
更多如下图:
(1)先通过普通索引定位到主键值id=5;
(2)在通过聚集索引定位到行记录;
这就是所谓的回表查询,先定位主键值,再定位行记录,它的性能较扫一遍索引树更低。
使用聚集索引(主键或第一个唯一索引)就不会回表,普通索引就会回表。
只需要在一棵索引树上就能获取SQL所需的所有列数据,无需回表,速度更快。
explain的输出结果Extra字段为Using index时,能够触发索引覆盖。
例子
第一个sql:
select id,name from user where name='shenjian';
Extra:Using index。
第二个sql:
select id,name,sex from user where name='shenjian';
能够命中name索引, 索引叶子节点存储了主键id,没有储存sex,sex字段必须回表查询才能获取到 ,不符合索引覆盖,需要再次通过id值扫描聚集索引获取sex字段,效率会降低。
Extra:Using index condition。
如果把(name)单列索引升级为联合索引(name, sex)就不同了。
可以看到:
select id,name ... where name='shenjian';
select id,name,sex ... where name='shenjian';
单列索升级为联合索引(name, sex)后,索引叶子节点存储了主键id,name,sex ,都能够命中索引覆盖,无需回表。
画外音,Extra:Using index。
场景1:全表count查询优化
原表为:
user(PK id, name, sex);
直接:
select count(name) from user;
不能利用索引覆盖。
添加索引:
alter table user add key(name);
就能够利用索引覆盖提效。
场景2:列查询回表优化
这个例子不再赘述,将单列索引(name)升级为联合索引(name, sex),即可避免回表。
场景3:分页查询
将单列索引(name)升级为联合索引(name, sex),也可以避免回表。
假设有这么个需求,查询表中“名字第一个字是张,性别男,年龄为10岁的所有记录”。那么,查询语句是这么写的:
根据前面说的“最左前缀原则”,该语句在搜索索引树的时候,只能匹配到名字第一个字是‘张’的记录(即记录ID3),接下来是怎么处理的呢?当然就是从ID3开始,逐个回表,到主键索引上找出相应的记录,再比对age和ismale这两个字段的值是否符合。
但是!MySQL 5.6引入了索引下推优化,可以在索引遍历过程中, 对索引中包含的字段先做判断,过滤掉不符合条件的记录,减少回表字数 。
下面图1、图2分别展示这两种情况。
图 1 中,在 (name,age) 索引里面我特意去掉了 age 的值, 这个过程 InnoDB 并不会去看 age 的值 ,只是按顺序把“name 第一个字是’张’”的记录一条条取出来回表。因此,需要回表 4 次。
图 2 跟图 1 的区别是,InnoDB 在 (name,age) 索引内部就判断了 age 是否等于 10,对于不等于 10 的记录,直接判断并跳过。在我们的这个例子中,只需要对 ID4、ID5 这两条记录回表取数据判断,就只需要回表 2 次。
如果没有索引下推优化(或称ICP优化),当进行索引查询时, 首先根据索引来查找记录,然后再根据where条件来过滤记录 ;在支持ICP优化后,MySQL会在取出索引的同时, 判断是否可以进行where条件过滤再进行索引查询 ,也就是说提前执行where的部分过滤操作,在某些场景下,可以大大减少回表次数,从而提升整体性能。
三、NBA比赛规则中什么情况下计时器要回表?
1、脚踢球,或防守三秒违例会回到十四秒。
2、防守方犯规,不是投篮时犯规,同时犯规的个数也没有累计到四次,抑或对无球队员的犯规,这时如果进攻时间不满十四秒要回表。
3、比赛出现争议判罚,裁判通过查看录像回放后调悄汪整计时器时间。
NBA规则是NBA及下属篮球联赛应用的篮球规则,虽然其与FIBA规则相比并没有原则上的不同,但是在比赛场地、比赛时间与比赛技战术要求方面,两者均有相当的差异存在。NBA规则本身并不适用于绝大部分篮球比赛,但基于NBA非凡的影响力而为人熟知。
扩展资料液纤:
计时器规则:
进攻时间不得超过24S,二次进攻时间不得超过14s。当发生犯规或违例时,时间多于14s,以14计算;当时间少于14s,恢复至14s并由进攻球队变现发球。
NBA违例:
1、进攻三秒
进攻球员所在球队控制球时,不得在本方罚球区两侧端线及其向场外延伸4英尺(1.2米)范围,以及罚球线的远离底线一侧的边缘之间的区域内停留超过三秒钟。 [15]
2、防守三秒违例
任何防守球员,如果位于16英尺(4.9米)罚球区或者该区域向底线外延伸4英尺(1.2米)的区域内,必须在三秒钟内处于积极防守一名对方球员的状态。积极防守的含义是,距离一名进攻启埋仔球员不超过一臂远,并处于防守的位置。
3、24秒违例
当一次进攻开始时,从球员得球计算,必须在24秒时间内投篮,24秒内至少投篮一次,否则就是24秒违例。
参考资料来源:
参考资料来源:
以上是问答百科为你整理的3条关于回表的问题,希望对你有帮助!更多相关回表的内容请站内查找。