⾯试题:索引失效的⼏种情况(MySQL)
1.前导模糊查询不能利⽤索引(like '%XX'或者like '%XX%')
  假如有这样⼀列code的值为'AAA','AAB','BAA','BAB' ,如果where code like '%AB'条件,由于前⾯是
  模糊的,所以不能利⽤索引的顺序,必须⼀个个去,看是否满⾜条件。这样会导致全索引扫描或者全表扫
大一java实训报告个人总结
  描。如果是这样的条件where code like 'A % ',就可以查CODE中A开头的CODE的位置,当碰到B开头的
  数据时,就可以停⽌查了,因为后⾯的数据⼀定不满⾜要求。这样就可以利⽤索引了。
2.如果是组合索引的话,如果不按照索引的顺序进⾏查,⽐如直接使⽤第三个位置上的索引⽽忽略第⼀⼆个位置上的索引时,则会春天英语怎么读spring中文谐音
getelementbyid的方法进⾏全表查询流程图多个分支怎么画
索引为c1,c2,c3,c4
上图结果显⽰直接使⽤c3是全表查询,⽆法使⽤该索引的,所以c3字段使⽤索引的前提是c1,c2两字段均使⽤了索引。
3.条件中有or
应尽量避免在 where ⼦句中使⽤ or 来连接条件,否则将导致引擎放弃使⽤索引⽽进⾏全表扫描,如:
select id from t where num=10 or num=20
可以这样查询:
select id from t where num=10 union all select id from t where num=20
4.索引⽆法存储null值,所以where的判断条件如果对字段进⾏了null值判断,将导致数据库放弃索引⽽进⾏全表查询,如
select id from t where num is null
可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:
select id from t where num=0
a.单列索引⽆法储null值,复合索引⽆法储全为null的值。
b.查询时,采⽤is null条件时,不能利⽤到索引,只能全表扫描。
为什么索引列⽆法存储Null值?
a.索引是有序的。NULL值进⼊索引时,⽆法确定其应该放在哪⾥。(将索引列值进⾏建树,其中必然涉及到诸多的⽐较操作,null 值是不确定值⽆法⽐较,⽆法确定null出现在索引树的叶⼦节点位置。) 
java输入字符串5.应尽量避免在 where ⼦句中使⽤!=或<>操作符,否则将引擎放弃使⽤索引⽽进⾏全表扫描。
6.in 和 not in 也要慎⽤,否则会导致全表扫描,如:
select id from t where num in(1,2,3)
对于连续的数值,能⽤ between 就不要⽤ in 了:
select id from t where num between 1 and 3
7. 应尽量避免在where⼦句中对字段进⾏函数操作,这将导致引擎放弃使⽤索引⽽进⾏全表扫描。如:
–name以abc开头的id
select id from t where substring(name,1,3)='abc'
mysql面试题sql8.应尽量避免在 where ⼦句中对字段进⾏表达式操作,这将导致引擎放弃使⽤索引⽽进⾏全表扫描。如:
select id from t where num/2=100
应改为:
select id from t where num=100*2

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。