HAHA库如下
NAME RQ something
张三 2009/11/01 正常
张三 2009/11/02 正常
张三 2009/11/03 正常
...
...李四 2009/10/31 正常
李四 2009/11/01 正常
李四 2009/11/02 正常
李四 2009/11/03 正常
..
..希望选出张三,李四每个人的头10条记录...张三 2009/11/01 正常
张三 2009/11/02 正常
....
张三 2009/11/10 正常
李四 2009/10/31 正常
李四 2009/11/01 正常
...
李四 2009/11/09 正常(共选中20行)
目前写法为
SELECT *
FROM HAHA A,(SELECT NAME,MIN(RQ) RRQQ FROM HAHA WHERE NAME in ('张三','李四') GROUP BY NAME) B
WHERE B.NAME=A.NAME
AND A.RQ-B.RRQQ<=10第一个问题...因为库相当的巨大,光是B一步,就要33多秒.而且是只搜索两个用户.目前要搜索600多用户..
第二个问题...测试时候只用张三,李四这两个用户测试.完整的语句超过3分钟没有反应...除了把B部分创建新表以外,有什么好办法么?目前估计库是2000万行的表..希望高手帮忙~~~
NAME RQ something
张三 2009/11/01 正常
张三 2009/11/02 正常
张三 2009/11/03 正常
...
...李四 2009/10/31 正常
李四 2009/11/01 正常
李四 2009/11/02 正常
李四 2009/11/03 正常
..
..希望选出张三,李四每个人的头10条记录...张三 2009/11/01 正常
张三 2009/11/02 正常
....
张三 2009/11/10 正常
李四 2009/10/31 正常
李四 2009/11/01 正常
...
李四 2009/11/09 正常(共选中20行)
目前写法为
SELECT *
FROM HAHA A,(SELECT NAME,MIN(RQ) RRQQ FROM HAHA WHERE NAME in ('张三','李四') GROUP BY NAME) B
WHERE B.NAME=A.NAME
AND A.RQ-B.RRQQ<=10第一个问题...因为库相当的巨大,光是B一步,就要33多秒.而且是只搜索两个用户.目前要搜索600多用户..
第二个问题...测试时候只用张三,李四这两个用户测试.完整的语句超过3分钟没有反应...除了把B部分创建新表以外,有什么好办法么?目前估计库是2000万行的表..希望高手帮忙~~~
SQL> select * from haha;NAME RQ SOMETHING
-------------------- ---------- --------------------
张三 2009/11/01 正常
张三 2009/11/02 正常
张三 2009/11/03 正常
李四 2009/11/01 正常
李四 2009/11/02 正常
李四 2009/11/03 正常6 rows selected.
SQL> select name,rq,something from
2 (
3 select name,rq,something,
4 row_number() over(partition by name order by rq) rn
5 from haha
6 )
7 where rn<=2; --这里我数据少 就把你的10换为2了NAME RQ SOMETHING
-------------------- ---------- --------------------
李四 2009/11/01 正常
李四 2009/11/02 正常
张三 2009/11/01 正常
张三 2009/11/02 正常
2:不要使用 in 方式查询,因为 a in(1,2)会被解释成a=1 or a=2,这样会引起索引失效
3:建议使用如下方式查询
select NAME,RQ,something from(
select NAME,RQ,something,rownum id from 表名 where NAME='张三'
)where id < 10
union
select NAME,RQ,something from(
select NAME,RQ,something,rownum id from 表名 where NAME='李四'
)where id < 10;
试试吧,期待成功。。
10楼...随便写写的...难道写..临时性路过打个酱油做个俯卧撑.然后回家吃饭?嘿嘿~~~
11楼..可以说的详细点么?你说的单词我不太懂...地区性断网...查询不到..老断老断
(select name,rq,something,row_number() over(partition by name order by rq) rn from haha where name in ('张三','李四'))
where rn <= 10;
select name, rq, something
from (select name,
rq,
something,
row_number() over(partition by name order by rq) rn
from haha
where name in ('张三', '李四'))
where rn <= 10;
建个临时表create global temporary table on commit proserve rows as select ....
取出2个用户的记录,1W不到的数据,再进行3楼的操作就很快了
600多个用户大概有200多万条记录,取出放到临时表中再查询速度会快很多