使用Oracle的instr函數與索引配合提高模糊查詢的效率
一般來說,在Oracle數據庫中,我們對tb表的name字段進行模糊查詢會采用下面兩種方式:
1.select * from tb where name like '%XX%';
2.select * from tb where instr(name,'XX')>0;
若是在name字段上沒有加索引,兩者效率差不多,基本沒有區別。
為提高效率,我們在name字段上可以加上非唯一性索引:
create index idx_tb_name on tb(name);
這樣,再使用
select * from tb where instr(name,'XX')>0;
這樣的語句查詢,效率可以提高不少,表數據量越大時兩者差別越大。但也要顧及到name字段加上索引后DML語句會使索引數據重新排序的影響。