mysql插入性能_mysql 数据量大时插入和查询性能
現在mysql中有數據33.8w的數據,然后做查詢和更新或插入操作,速度很慢,基本100條數據就要1.68s。好慢啊,我要測試一下,到底慢在哪?能不能提高點速度?
參考一篇博文:http://blog.csdn.net/clh604/article/details/19608869#0-tsina-1-37035-397232819ff9a47a7b7e80a40613cfe1。現在是2015.06.15 09:59。我要開始了。
1、首先我要在數據庫中插入50w的數據。
剛開始速度還是很快的,當數據庫中有2w多數據時,插入速度明顯變慢,插入1000條,大約需要十幾二十秒?,F在數據庫中大約有4w數據,插入1000條,大約需要二三十秒。這個速度正常嗎?程序是同事的,用了SSH框架,不用手動建表,有影響嗎?不是吧,如果速度維持在30s、1000條,還需要3個小時,才能把數據插完?,F在數據庫中有14.7w,插入1000條大概2分半。
插入前還要根據標題檢查是否有重復的,如果有重復的就從數據庫中查詢出來,然后合并,更新,如果沒有就插入。
不是吧,我將插入數據庫的程序改為了最簡單的jdbc,參考博文:http://www.askmaclean.com/archives/java-jdbc-batch-update-optimization.html。用PreparedStatement+addBatch+executeBatch,9s中插入了13.5w條。難道用框架,效率會受這么大的影響??不到10分鐘已經導入了50w數據了。
將用SSH的程序去掉查詢,只有插入,速度大概為1000條三四秒鐘?,F在已經6w了,速度沒有降低。已經10.3w了,速度沒有變慢。看來第一次測試時,速度變慢是因為查詢。
2、下面測試查詢的速度。(數據庫中有54.6w數據)
比較根據id查詢和根據沒有建索引的普通字段查詢速度的差別。
比較批量查詢和單獨查詢的差別。
根據id查詢1000次,花費時間:14s。好長啊。先保存下,要下班了?,F在是2015年6月16日 09:51,繼續。
看來昨天的14s還算正常的。今天根據title查,title是沒有建索引的,查了10條,用了大概60秒。相差3750倍!!好吧,我知道我的程序慢在哪了。
上面使用普通的jdbc查詢的,下面用SSH框架的程序測一測,用的數據庫中有348000數據。
根據id查詢1000次,竟然消耗時間:70538ms。查詢比純jdbc慢5倍,插入慢3-4倍。根據title就不測了,還是測測吧,查需10條,消耗時間:121825ms。
下面我要測測批量查詢是不是會好點。
我都驚了!根據id批量查詢1000次,就是用in集合,消耗時間:2996ms。好快啊,參考:http://stackoverflow.com/questions/9853197/jdbc-batch-query-for-high-performance。
根據title查詢10次,消耗時間:5745ms,查詢50次,消耗時間:6485ms,100次,消耗時間:6624ms,1000次,消耗時間:6155ms。怎么沒差別啊,是不是哪錯了?幾次查詢之間會有影響嗎?我不明白。
用SSH框架的程序測,數據庫中34.8w,根據id一次查詢1000條,消耗時間:17083ms。根據title查詢10條,消耗時間:13182ms;50條,消耗時間:12655ms;100條,消耗時間:13682ms;500條,消耗時間:17317ms;1000條,消耗時間:21314ms。差別也不大。
到這就測的差不多了,下面總結下,要不估計只有現在的我能看懂了。
插入操作
純jdbc
1000條/1秒;50w數據大約10分鐘,速度穩定。
SSH框架
1000條/3~4秒;50w數據大約30分鐘,速度穩定。
多次單條查詢
根據id查詢
根據title查詢(無索引)
純jdbc(數據庫中有54.6w數據)
1000次/14秒
10次/60秒
SSH框架(數據庫中34.8w)
1000次/70秒
10次/12秒
in語句批量查詢
根據id查詢
根據title查詢(無索引)
純jdbc(數據庫中有54.6w數據)
1000條/3秒
1000-10條/6秒
SSH框架(數據庫中34.8w)
1000條/17秒
10條/13秒;500條/17秒;1000條/21秒
結論:純jdbc比用框架快3~5倍;插入速度不會因為數據量增多而變慢;查詢時盡量一批批的查,不要一條條的查。
現在要去改我的程序了,現在插入100條,大約2分鐘。
今天不想測了,先到這吧。
修改了程序,沒有大動,只將原來一條一條的查詢,改為了一批一批的查詢,速度明顯快了,而且不會隨著數據量變化而變化,現在速度是1000條3秒,不錯不錯。
總結
以上是生活随笔為你收集整理的mysql插入性能_mysql 数据量大时插入和查询性能的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql答题表设计_PHP+MYSQL
- 下一篇: mysql 判断日期是否在某范围内_判断