isodd mysql_牛客网刷题笔记——错题集2

1

2 boolean isOdd = false;3

4 for(int i=1;i<=2;++i)5 {6 if(i%2==1)isOdd = true;7 else isOdd = false;8 a+=i*(isOdd?1:-1);9 }

A、-1

B、-2

C、0

D、1

错误答案:C

正确答案:D

解析:因为多线程存在值覆盖的情况,根据下图补充一下,第二种情景还有可能是-3,所以可能的值为-1,-2,0,-3

cd033c43545a6b31843b083cfe259a9a.png

7、mysql数据库,game_order表表结构如下,下面哪些sql能使用到索引()?

e2445122611f6ab94dbcfa44f1e521c8.png

A、select * from game_order where plat_game_id=5 and plat_id=134

B、select * from game_order where plat_id=134 and

plat_game_id=5 and plat_order_id=’100’

C、select * from game_order where plat_order_id=’100’

D、select * from game_order where plat_game_id=5 and

plat_order_id=’100’ and plat_id=134

E、select * from game_order where plat_game_id=5 and plat_order_id=’100’

错误答案:ABCDE

正确答案:BCDE

解析:

这道题目想考察的知识点是MySQL组合索引(复合索引)的最左优先原则。最左优先就是说组合索引的第一个字段必须出现在查询组句中,这个索引才会被用到。只要组合索引最左边第一个字段出现在Where中,那么不管后面的字段出现与否或者出现顺序如何,MySQL引擎都会自动调用索引来优化查询效率。

根据最左匹配原则可以知道B-Tree建立索引的过程,比如假设有一个3列索引(col1,col2,col3),那么MySQL只会会建立三个索引(col1),(col1,col2),(col1,col2,col3)。

所以题目会创建三个索引(plat_order_id)、(plat_order_id与plat_game_id的组合索引)、(plat_order_id、plat_game_id与plat_id的组合索引)。根据最左匹配原则,where语句必须要有plat_order_id才能调用索引(如果没有plat_order_id字段那么一个索引也调用不到),如果同时出现plat_order_id与plat_game_id则会调用两者的组合索引,如果同时出现三者则调用三者的组合索引。

题目问有哪些sql能使用到索引,个人认为只要Where后出现了plat_order_id字段的SQL语句都会调用到索引,只不过是所调用的索引不同而已,所以选BCDE。如果题目说清楚是调用到三个字段的复合索引,那答案才是BD。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值