用不上索引的SQL语句

Posted 只为成功找方向,不为失败找借口

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用不上索引的SQL语句相关的知识,希望对你有一定的参考价值。

下面介绍六种建立索引后不起作用的sql语句。

1、使用不等于操作符(<>, !=)

SELECT *

FROM dept

WHERE staff_num <> 1000; ×

 

SELECT *

FROM dept

WHERE staff_num < 1000

OR staff_num > 1000; √

 

2、使用 is null 或 is not null

任何包含null值的列都将不会被包含在索引中。

解决这个问题的办法就是:建表时把需要索引的列

定义为非空(not null)

 

3、索引列使用函数或计算

SELECT *

FROM fin_ipb_feeinfo

WHERE trunc(fee_date) > ‘2007-01-01‘; ×

 

SELECT *

FROM fin_ipb_feeinfo

WHERE fee_date > to_date( ‘2007-01-01‘,‘yyyy-mm-dd‘); √

 

WHERE sal*1.1>950 ×

 

WHERE sal>950/1.1 √

 

4、索引列与比较值数据类型不一致

 

emp_no: NUMBER型

 

WHERE emp_no=123(好) √

WHERE emp_no= ‘123‘(也可)

 

emp_type:CHAR型

WHERE emp_type=123 (此时,查询时,不利用索引列) ×

 

WHERE emp_type=‘123‘ √

 

5、复合索引,必须使用主索引列

 

例:复合索引(deptno,job)

WHERE deptno=20 AND job=’MANAGER’ √

WHERE deptno=20 √

WHERE job=’MANAGER’ AND deptno=20 √

 

WHERE job=’MANAGER’ ×

6、like子句

 

WHERE name LIKE ‘王%’ √

WHERE name LIKE ‘%王%’ ×

WHERE name LIKE ‘%王’ ×

以上是关于用不上索引的SQL语句的主要内容,如果未能解决你的问题,请参考以下文章

分析下为什么spring 整合mybatis后为啥用不上session缓存

SQLSever--事务与索引

oracle删除某个表的索引的sql语句

创建唯一索引的 sql语句

如何看mysql sql查询语句用了哪些索引?如何分析查询语句?

求助,sql语句无法用到索引,执行很慢