表結構: 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)最終數據量可能會有5400W1.表分区(問題: 如果建表分區的話只能按日期建,每月一個分區,但是如果做跨月查詢的話,速度會不會提升? 還是更可能還會變慢?)2.索引 已經在DATCREATE上建了索引(datcreate有order by操作),但是效果并不明顯!請做過這樣的大數據量查詢的XDJM指教一下!
謝謝!
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)最終數據量可能會有5400W1.表分区(問題: 如果建表分區的話只能按日期建,每月一個分區,但是如果做跨月查詢的話,速度會不會提升? 還是更可能還會變慢?)2.索引 已經在DATCREATE上建了索引(datcreate有order by操作),但是效果并不明顯!請做過這樣的大數據量查詢的XDJM指教一下!
謝謝!
2.在oracle的Enterprise Manager Console里面把这个表分析一下.
建分区,然后在分区上建立local索引,再看下select的速度,看响应速度
use +--数据库名
select * from +--表名
where (datcreate between YYYY-MM-DD and yyyy-mm-dd )
and (vc2userid=? )
order by datcreate
GO
前臺有分頁 用的extremetable
也是利用的rownum 的分頁!
2、用户估计一下子也不需要200w记录,需求了解
3、适当的索引、分区还是需要的
4、between and 函数本身的机制就不是很合适进行大数据量查询
跟这几个方面有关
1.你的sql语句语法结构是不是最优的, oracle里面有个查询分析器
2.索引的类型是否选对
3.采用view