四 索引与分页--怎么样SQL运行的更快
- 正确的使用索引
Where条件落在索引上
不要在where的=前使用函数,否则无法使用索引
Is Null可能无法使用索引
不正确的隐式转换可能不能使用索引
如果能在索引获得数据,就不要回表
如果是复合索引,注意第2个字段以后,可能使用不到索引 - 正确的使用hint
如果有别名,一定要有别名
格式如/*+ index(t index_name) */ - 无需回表查询的分页写法
存在以下表T1(A,B,C,D) T1上有索引字段(B,C) .如果只是查B,C两个字段则:select *
from ( select tt.b, tt.c, rownum as rn
from ( select t.b, t.c from t1 t where c = 2 order by t.c) tt
where rownum < 3 )
where rn > 1
- 需回表查询的分页写法
select /* + ordered use_nl(t,t1) */
*
from ( select rid from (
select rownum rn,rid from (
select rowid rid from t1
where c = 2
order by c desc )
where rownum <= 50 )
where rn >= 1 ) t,
t1
where t.rid = t1.rowid;