日期:2014-05-16  浏览次数:20811 次

如何处理大数据量的查询?
表結構:

  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指教一下!
謝謝!

------解决方案--------------------
分区,索引都是有必要的.还有适当调整相关参数.

我现在的数据库,超个3亿条记录(大小40G左右)的大表有三个,主要索引用得当没感觉出有太慢的.
------解决方案--------------------
索引,分区表都有了,数据量这么大查询需要2分钟我觉得是在正常范围内

------解决方案--------------------
200W的数据select出来,想在1分钟以内查询出来,那也只能提高服务器的硬件配置了

------解决方案--------------------
探讨
引用:
索引,分区表都有了,数据量这么大查询需要2分钟我觉得是在正常范围内


可是用戶覺得很慢!
我也覺得很慢!
讓用戶升級服務器?

------解决方案--------------------
study
------解决方案--------------------
太大没用过,索引还是索引!!!
------解决方案--------------------
你可以看看执行计划才知道查询时有没有用到索引
------解决方案--------------------
可以适当的建立视图(如物化视图),提高检索效率
------解决方案--------------------
1000W, 查200W, 有20%的数据了,建了索引估计也用不上的。

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

从应用着手,少查点数据
------解决方案--------------------
一下查出来200w数据,怎么看,是不是需求有问题阿?
建分区,然后在分区上建立local索引,再看下select的速度,看响应速度

------解决方案--------------------
帮顶
------解决方案--------------------
这个问题需要考虑并行,充分利用多CPU的优势,仅仅分区并不能很大的提高速度。
------解决方案--------------------
学习中~~~
------解决方案--------------------
学习中了~~
------解决方案--------------------
学习中了~~
------解决方案--------------------
感觉速度差不多了修改下select 语句 看是否可以把条件简化

看否把datcreate 改成 smalldate
 use +--数据库名
select * from +--表名
where (datcreate between YYYY-MM-DD and yyyy-mm-dd )
and (vc2userid=? )
order by datcreate 
GO
------解决方案--------------------
引用楼主 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


------解决方案--------------------
普通用户需要一次取这么多数据?没有实际意义