用oracle做全表查询时发现一个问题,如果数据库某个varchar2类型的字段建了索引,但是查询的时候扔进入的值是long或integer类型的数据,oracle会不走索引,oracle会对传入的参数做to_char()处理,所以不会走索引。
走索引
如果参数不是字符串类型,而是数字类型,则不走索引。
走索引
select t.username,t.userpassword,t.sex,t.address,t.createtime from SYSTEM_USERINFO t
where t.tel=to_char(13845784589) –tel varchar2类型
如果字段是number类型的,参数可以是数字类型也可以试字符类型,结果都会走索引
select t.username,t.userpassword,t.sex,t.address,t.createtime from SYSTEM_USERINFO t where t.user_type=’1’
下面是日期类型date
select t.username,t.userpassword,t.sex,t.address,t.createtime from SYSTEM_USERINFO t
where to_char(t.createtime,’yyyymmdd’) >’20170606’ –不走索引
–where t.createtime>to_date(‘20170606’,’yyyymmdd’) –走索引
走索引
不走索引
模糊查询%放在开头不走索引,放在其它地方走索引。
select t.username,t.userpassword,t.sex,t.address,t.createtime from SYSTEM_USERINFO t where t.username like ‘root%’