增加查詢的范圍限制,避免全范圍的搜索。
例:以下查詢表record 中時間ActionTime小於2001年3月1日的數據:
select * from record where ActionTime < to_date ('20010301' ,'yyyymm');
查詢計劃表明,上面的查詢對表進行全表掃描,如果我們知道表中的最早的數據為2001年1月1日,那麼,可以增加一個最小時間,
使查詢在一個完整的范圍之內。修改如下:
select * from record where ActionTime < to_date ('20010301' ,'yyyymm') and ActionTime > to_date ('20010101' ,'yyyymm');
後一種SQL語句將利用上ActionTime字段上的索引,從而提高查詢效率。
把'20010301'換成一個變量,根據取值的機率,可以有一半以上的機會提高效率。
同理,對於大於某個值的查詢,如果知道當前可能的最大值,也可以在Where子句中加上 “AND 列名< MAX(最大值)”。