我的數據庫是:mysql
一張表的數據上了千萬行,而且每天都以10幾萬行在增張。
目前需要解決的問題,我的頁面在做幾個字段的查詢的時候顯示出來居慢,我用的是java,沒用
什么框架,直接JDBC查詢。
大家有什么好方法沒?
我目前想這樣搞下:寫個存儲過程,JAVA調存儲過程返回的數據集(集合),應該快的多,
但是mysql可以返回來數據集嗎,java代碼怎么得到?又不太好搞?
這樣的問題大家應該碰到過,有經驗的朋友們請告訴下,謝謝大家?
問題補充:
我的SQL語句里面用了日期函數判斷,在日期上建立索引,會失效嗎?
比如:......where ((TRUNC(IMMS_REPORT_REALSEND.DATCREATE) >= TRUNC(sysdate))
采納的答案
2008-12-15 binlinux (初級程序員)
最好是拆分表,將歷史數據移走
提問者對于答案的評價:
我就這樣做算了.
其他回答
可以拆分表~
czx566 (初級程序員) 2008-12-11
一次取超過1W行的數據,估計是用INDEX的效果也好不到哪兒去。
sdh5724 (資深程序員) 2008-12-11
如果你不要一次看全部數據的話,可以做個類似分頁的東西,這樣結果集的數據不會一次全部返回,每次返回的只是你設定的一頁要顯示的數據條數。
enetor (初級程序員) 2008-12-11
建議對在數據庫設計上做些文章。
比如可以考慮對表進行“橫向分割”或“縱向分割”。
可以把你的表結構和業務拿出來討論下。
pangyi (初級程序員) 2008-12-11
建立索引是唯一辦法
墓里活人 (資深程序員) 2008-12-11
樓主是MYSQL!
千萬級別的數據量對mysql就是一個嚴峻的考驗!
不推薦索引!
還是推薦分表!
czx566 (初級程序員) 2008-12-11
mysql有函數索引么。。。。。
1000W數據, 目前的機器輕松應付的。
1?!?span lang="EN-US">IMMS_REPORT_REALSEND.DATCREATE 現建立索引
2。 TRUNC這么用不對的, 你可以先計算一個 sysdate 當天00:00:00的時間,然后再比較, 這樣就對了。
sdh5724 (資深程序員) 2008-12-11
to 墓里活人:
從戰術上來說,建立索引是個不錯的辦法。
從戰略上來說,數據分割是明智之舉。
pangyi (初級程序員) 2008-12-11
現在我也遇到了這樣的問題,用得方法就是分表,按天日期來分表,每天一張表。不過這樣查詢就有點問題了,正在想辦法解決.........
qiaoakai (初級程序員) 2008-12-11
引用
現在我也遇到了這樣的問題,用得方法就是分表,按天日期來分表,每天一張表。不過這樣查詢就有點問題了,正在想辦法解決.........
不建議采用時間來分表,一天一張表,維護程序比較復雜。
建議從業務上做劃分。以電廠的運行數據為例。電廠運行時,有很多測點。測點的數據是以秒為單位產生的。若將這些數據都放到一張表中,一年下來至少有上億條數據。電廠一般至少有20000多個測點。但若給每個測點建立一張數據表,則數據量會分解到20000多張表中,每張表里的數據一年下來也就數十萬而已。從應用的角度,也可以很好的對數據進行分析和管理。
pangyi (初級程序員) 2008-12-12
用日期函數的時候不會用到索引
waterdh (中級程序員) 2008-12-12
建議分割表
queue19 (初級程序員) 2008-12-12
可以每天晚上對數據進行合并,匯總到另外一張或幾張表中,比如日表,月表.
大力水手 (初級程序員) 2008-12-12
TOBAO也是用MYSQL的 先看看業務允許分表不,如果不允許 那么建議你把時間判斷的給去掉 你取的記錄應該不多,如果多就分次取,在內存里面進行判斷 這樣可能會快點。不要讓INDEX失效。
fjlyxx (中級程序員) 2008-12-13
根據查詢條件加index..