发布网友
共3个回答
热心网友
SELECT * FROM (SELECT A.*,Rownum rn FROM
(SELECT * FROM tb_one where
id1 like 'xy%'
and name in (select name from tb_one where id2 like 'xy%')
and INSTIME>=to_date('2013-1-8 00:00:00','yyyy-mm-dd hh24:mi:ss')
and INSTIME<=to_date('2013-1-8 23:59:59','yyyy-mm-dd hh24:mi:ss') order by INSTIME desc) A
WHERE ROWNUM <=20 ) WHERE rn >=10 ;
name、instime上都要创建索引
热心网友
1。 看能不能建立索引(和其他几位仁兄一致)
2。 能否不用like 如果tb_one中的id2不是主键也不是索引,可以改为substr(id2,1,2) = 'xy'
3。 排序尽量不要,既然LZ说了这是前提那就省略不说
4。 加hint并行处理(这个会提高不少,但需要数据库开启并行,并且硬件足以支持)
5。 这个肯定是全表扫描,不用想(都like了)
6。 根据你的时间条件,可以写成substr(instime) = '20130108'
7。 加表别名,并不要使用星号
9。 少些几个子查询。。。
热心网友
如果数据量非常大的情况下一般都建立有索引,而like模糊查询是会影响索引的检索效率,所以最好不要用like。
另外写查询语句时尽量避免用select *,一般将需要显示的列select出来就ok
热心网友
如果数据量非常大的情况下一般都建立有索引,而like模糊查询是会影响索引的检索效率,所以最好不要用like。
另外写查询语句时尽量避免用select *,一般将需要显示的列select出来就ok
热心网友
SELECT * FROM (SELECT A.*,Rownum rn FROM
(SELECT * FROM tb_one where
id1 like 'xy%'
and name in (select name from tb_one where id2 like 'xy%')
and INSTIME>=to_date('2013-1-8 00:00:00','yyyy-mm-dd hh24:mi:ss')
and INSTIME<=to_date('2013-1-8 23:59:59','yyyy-mm-dd hh24:mi:ss') order by INSTIME desc) A
WHERE ROWNUM <=20 ) WHERE rn >=10 ;
name、instime上都要创建索引
热心网友
1。 看能不能建立索引(和其他几位仁兄一致)
2。 能否不用like 如果tb_one中的id2不是主键也不是索引,可以改为substr(id2,1,2) = 'xy'
3。 排序尽量不要,既然LZ说了这是前提那就省略不说
4。 加hint并行处理(这个会提高不少,但需要数据库开启并行,并且硬件足以支持)
5。 这个肯定是全表扫描,不用想(都like了)
6。 根据你的时间条件,可以写成substr(instime) = '20130108'
7。 加表别名,并不要使用星号
9。 少些几个子查询。。。