如何处理大数据量的查询?

JJTwo 2009-02-06 09:49:27
表結構:

NUMREPORTREALSENDGUID NUMBER not null,
NUMMMSID NUMBER(15),
VC2SERVICECODE VARCHAR2(24),
VC2CAMPAIGNID VARCHAR2(24),
VC2CALLEDNUM VARCHAR2(64),
DATCREATE DATE,
VC2REPORTSTATUS VARCHAR2(1),
VC2STATUS VARCHAR2(1),
VC2USERID VARCHAR2(128)

SQL:

select

vc2servicecode,vc2campaignid,datcreate,vc2reportstatus,vc2status
from imms_report_realsend
where datcreate between YYYY-MM-DD and yyyy-mm-dd
and vc2userid=?
order by datcreate

目前數據庫里已有1000多萬筆數據。查一下其中的200W大概需要2分鐘,太長

了。(不知道是不是分頁有問題,用的是extremetable)

最終數據量可能會有5400W

1.表分区(問題: 如果建表分區的話只能按日期建,每月一個分區,但是如果

做跨月查詢的話,速度會不會提升? 還是更可能還會變慢?)


2.索引 已經在DATCREATE上建了索引(datcreate有order by操作),但是效果

并不明顯!

請做過這樣的大數據量查詢的XDJM指教一下!
謝謝!
...全文
2256 40 打赏 收藏 转发到动态 举报
写回复
用AI写文章
40 条回复
切换为时间正序
请发表友善的回复…
发表回复
supermanfei 2012-07-05
  • 打赏
  • 举报
回复
对关键字建立全文索引
plummoon 2011-06-25
  • 打赏
  • 举报
回复
我也同样遇到了大数据量的麻烦,用户这些要求也不好去协调
试试试图吧
yaohaolun3 2009-06-24
  • 打赏
  • 举报
回复
全部取出来没什么意义呀
No_Data_Found 2009-06-24
  • 打赏
  • 举报
回复
bellalen 2009-02-19
  • 打赏
  • 举报
回复
大数据量查询在oracle经常会遇见
跟这几个方面有关
1.你的sql语句语法结构是不是最优的, oracle里面有个查询分析器
2.索引的类型是否选对
3.采用view
wffffc 2009-02-19
  • 打赏
  • 举报
回复
分页问题,返回第一页绝对要不了这么久
dingpin 2009-02-19
  • 打赏
  • 举报
回复
学习...
oraclelogan 2009-02-17
  • 打赏
  • 举报
回复
[Quote=引用楼主 JJTwo 的帖子:]
表結構:

NUMREPORTREALSENDGUID NUMBER not null,
NUMMMSID NUMBER(15),
VC2SERVICECODE VARCHAR2(24),
VC2CAMPAIGNID VARCHAR2(24),
VC2CALLEDNUM VARCHAR2(64),
DATCREATE DATE,
VC2REPORTSTATUS VARCHAR2(1),
VC2STATUS VARCHAR2(1),
VC2USERID VARCHAR2(128)

SQL:

select

vc2servicecode,vc…
[/Quote]

第一问,不会变慢。
kingstarer 2009-02-17
  • 打赏
  • 举报
回复
能不能先取一部分传到前台先展示,然后再取后面的

这样用户感觉会快一些
deduct 2009-02-16
  • 打赏
  • 举报
回复
我就看看好了.. 呵呵..!!!
friendjin 2009-02-13
  • 打赏
  • 举报
回复
楼上说的对,你的这个查询本身就没有意义,仔细想想吧
friendjin 2009-02-13
  • 打赏
  • 举报
回复
楼上说的对,你的这个查询本身就没有意义,仔细想想吧
ABNORMAL1982 2009-02-13
  • 打赏
  • 举报
回复
1、用户的需求有时候可以适当协调
2、用户估计一下子也不需要200w记录,需求了解
3、适当的索引、分区还是需要的
4、between and 函数本身的机制就不是很合适进行大数据量查询
jdsnhan 2009-02-12
  • 打赏
  • 举报
回复
不要让用户的需求玩死开发人员,也玩死DBA
wyquan101 2009-02-12
  • 打赏
  • 举报
回复
取出太多,除非输出成文件用,
否则没有什么意义,
顺便学习。
kanxue660 2009-02-11
  • 打赏
  • 举报
回复
普通用户需要一次取这么多数据?没有实际意义
JJTwo 2009-02-11
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 codearts 的回复:]
1000W, 查200W, 有20%的数据了,建了索引估计也用不上的。

分区对这个情况的查询,也应该没什么大的改善。

从应用着手,少查点数据
[/Quote]
控制用戶輸入的查詢條件!
估計也會很慢!
畢竟數據量有那么大!
JJTwo 2009-02-11
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 hugh_9 的回复:]
一下查出来200w数据,怎么看,是不是需求有问题阿?
建分区,然后在分区上建立local索引,再看下select的速度,看响应速度
[/Quote]

是啊!要是用戶就想這么查我也沒有辦法啊!
200W 分頁就分了15W多頁!
翻死他
JJTwo 2009-02-11
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 lpc19598188 的回复:]
引用楼主 JJTwo 的帖子:
select

vc2servicecode,vc2campaignid,datcreate,vc2reportstatus,vc2status
from imms_report_realsend
where datcreate between YYYY-MM-DD and yyyy-mm-dd
and vc2userid=?
order by datcreate



在数据库端做个分页可以么?楼主是前台分页的吗?
[/Quote]

前臺有分頁 用的extremetable
也是利用的rownum 的分頁!
qqsisibin 2009-02-10
  • 打赏
  • 举报
回复
感觉速度差不多了修改下select 语句 看是否可以把条件简化

看否把datcreate 改成 smalldate
use +--数据库名
select * from +--表名
where (datcreate between YYYY-MM-DD and yyyy-mm-dd )
and (vc2userid=? )
order by datcreate
GO
加载更多回复(20)

3,490

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧