列与列对比
某个表中,两个列a,b都建立了单独索引,下面这种查询条件不会走索引
select * from test where a = b
这种情况被认为还不如走全表扫描
存在NULL值条件
当只针对一个字段的关于NULL的判断,如果通知再两个字段对NULL进行判断,还是会走全表扫描
比如
select * from table where name is null
假如name有索引,则是走的索引
如果再加一个id
select * from table where name is null or id is null
则会走全表扫描
NOT条件
当查询条件为非
的时候,执行计划可能更倾向于全表扫描
查询条件有:
- <>
- NOT
- in
- not exists
LIKE通配符
这里要说一下前查询和后查询
- 前查询: 类似于
%明
,查询名字中带明的而且不姓明的 - 后查询:类似于
司%
,查询姓司的
当前查询的时候,更倾向于全表扫描
所以当业务设计的时候,尽量考虑模糊搜索的问题,要更多使用后置通配符
where条件上包括函数
select * from test where upper(name)='SUNYANG';
这样是不会走索引的,因为查询条件带了索引
当查询条件不带索引的时候,依然可以走索引
select * from test where name=upper('sunyang');
--INDEX RANGE SCAN
数据类型转换
当查询条件存在隐式转换的时候,比如id的类型为int,但是传输的是一个String类型
select * from table where id = '1'
谓词运算
select * from table where id/2 = type_id