首页 > 试题广场 >

查询语句中使用到索引idx_A_B_C的语句有哪些?

[不定项选择题]
mysql数据库中一张user表中,其中包含字段A,B,C,字段类型如下:A:int,B:int,C:int根据字段A,B,C按照ABC顺序建立复合索引idx_A_B_C,以下查询语句中使用到索引idx_A_B_C的语句有哪些?
  • select *from user where A=1 and B=1
  • select *from user where 1=1 and A=1 and B=1
  • select *from user where B=1 and C=1
  • select *from user where A=1 and C=1
复合索引可以只使用复合索引中的一部分,但必须是由最左部分开始,且可以存在常量。
编辑于 2016-01-20 18:05:46 回复(0)
正确答案是AB,垃圾牛客
发表于 2019-12-16 18:02:46 回复(2)
因复合索引为idx_A_B_C,所以查询条件只能是在a,ab,abc,ac才算 使用到索引idx_A_B_C
发表于 2015-11-07 21:44:19 回复(6)
复合索引: Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分。 例如索引是key index (a,b,c). 可以支持a | a,b| a,b,c 3种组合进行查找,但不支持 b,c进行查找 .当最左侧字段是常量引用时,索引就十分有效
发表于 2015-11-16 17:51:33 回复(6)
答案是ABD
A   复合索引最左前缀规则对于条件A=1 and B=1 显然会用到索引。
B 对于条件 A = 1 and B = 1满足最左前缀 1 = 1 常量表达式这部分不通过索引。
C 不满足最左前缀条件,不能使用索引。
D  通过条件A = 1来使用索引进行查询。因为是最左前缀中一种,而如果改为单独条件C = 1,就无法使用索引而是全表扫描,这些可以通过mysql的explain命令验证。

这是用于多个and条件连接的条件或单条件应用最左前缀若是or则不行。
编辑于 2016-09-12 00:39:01 回复(0)
答案选择ABD,之所以因为a,c组合也可以,是因为实际上只用到了a的索引,c并没有用到,但是显示的还是ABC联合索引,实际只是用到了a的单列索引
发表于 2019-12-22 02:27:31 回复(0)
参考“星痕Sky”:
复合索引可以只使用复合索引中的一部分,但必须是由最左部分开始,且可以存在常量。
发表于 2016-09-11 00:33:38 回复(0)
复合索引可以只使用复合索引中的一部分,但必须是由最左部分开始,且可以存在常量。
复合索引:   Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分。   例如索引是key index (a,b,c). 可以支持a | a,b| a,b,c 3种组合进行查找,但不支持 b,c进行查找 .当最左侧字段是常量引用时,索引就十分有效
发表于 2016-10-01 09:24:49 回复(0)
A:最左前缀原则
B:1=1为true,优化器直接优化掉,还是最左前缀原则
C:不符合最左前缀原则
D:索引下推

发表于 2021-08-17 15:19:59 回复(0)
为什么对于ac也可以查?
这里面用到一个叫“索引下推”的技术。这是在后来的mysql5.6还是多少版本以后自带的优化器优化。a在满足之后显然可以用联合索引,接下来对于c,因为它也属于联合索引的一部分,所以可以在索引遍历过程中,对索引中包含的字段先做判断,过滤掉不符合条件的记录,减少回表次数。更具体的可以查查“索引下推”了解下
编辑于 2020-03-08 10:58:05 回复(0)

查A、C会使用到索引!

首先创建一个表,这里我偷懒用自己以前一个图书借阅系统的借阅表:
为该表的user_id、book_id、form_id建立索引:
CREATE INDEX idx_u_b_f on borrow_record(user_id,book_id,form_id);
然后执行下面的查询语句:
EXPLAIN select * from borrow_record where user_id=1 and form_id=1527652442742;
查看执行计划:

很明显用到了索引!
发表于 2019-09-24 20:48:11 回复(3)
对复合索引,按照字段在查询条件中出现的频度建立索引。在复合索引中,记录首先按照第一个字段排序。对于在第一个字段上取值相同的记录,系统再按照第二个字段的取值排序,以此类推。因此只有复合索引的第一个字段出现在查询条件中,该索引才可能被使用,因此将应用频度高的字段,放置在复合索引的前面,会使系统最大可能地使用此索引,发挥索引的作用。
发表于 2017-02-23 11:07:17 回复(0)
D正确么?
发表于 2016-07-21 16:22:54 回复(0)
必须从最左部分开始
发表于 2023-03-18 11:17:16 回复(0)

复合索引可以只使用复合索引中的一部分,但必须是由最左部分开始,且可以存在常量【即最左前缀原则】

索引indexABC),则在(A),(AB),(ABC)上已经建立了索引

发表于 2022-03-12 22:47:31 回复(0)
答案:ABD
user表中的所有字段建立联合索引,
A:正确。select子句覆盖索引,where子句符合联合索引的最左前缀原则。
B:正确。同A
C:错误。不符合联合索引的最左前缀原则。
D:正确。根据最左前缀原则,只有最左列索引A索引生效。
发表于 2022-02-10 15:17:30 回复(0)
D是对的,最左原则情况下A满足,B断链,即只有A 列的查询用到了索引,C列的没有
发表于 2021-10-04 16:36:57 回复(0)
我很好奇,如果WHRE A,B,C,D呢
发表于 2021-09-16 13:03:45 回复(0)
最左索引前缀原则
发表于 2021-07-31 20:42:29 回复(0)
左匹配,要使用到该索引,则左索引因和复合索引相同
发表于 2021-02-19 18:25:13 回复(0)