数据库表的数据量特别大的时候,检索条件用了索引和没有用索引差别相当大。几倍到几百倍不等。
能不能用到索引是根据数据库的实施计划来决定的。
我们以in为例
前提:A表的字段a1有索引
SQL:select * from B where B.a1 in (select C.a1 as a1 from C)
这个时候由于select C.a1 as a1 from C返回的是记录集,因此索引利用不上。
把上面的SQL改变写法如下:
select * from B where B.a1 = any (array(select C.a1 as a1 from C))
这样改写后就能够利用索引了。
为什么能利用索引呢? 一般的认识是 in,any的内容如果是记录集的话,索引就利用不上。如果是数组,字符串的话,就能够利用索引。