Ⅰ 使用hibernate的save方法保存數據到MySQL資料庫為什麼存入的時間會增加一秒
這種一般不好處理,通常處理辦法就是讓資料庫你處理時間,在存入時直接讓資料庫生成時間就沒有問題了,或者在存入數據時去資料庫查詢下當前的資料庫時間.
Ⅱ 數據條數太多,插入到資料庫有延遲,怎麼解決
1.我們往資料庫中導入的數據通常是有固定的模板的,也就是有列頭,但是可能excel中的一條數據分布存儲在不同的數據表中,那麼我們怎麼來導入了,我們可以在類文件中直接拼接sql語句插入,這樣做的話我認為比較麻煩。我的做法是:在數據中建一個中間表暫且叫做Temp表跟excel中列一一對應,其中表中多加state列用來標識數據驗證失敗還是成功的(0代表數據沒有問題,-1代表有問題)、failReason記錄導入失敗原因,然後再添加一個配置文件來做excel列和數據表的映射。 2.要導入的數據通常要做驗證,那些不符合導入規則的數據時不允許或者不能導入的。我把數據分兩步來驗證,一部分在代碼段驗證,一部分在資料庫驗證。至於怎麼分那就自己去根據情況分析了。我是把諸如字元長度限制,正則表達式規則限制等放 在代碼段驗證,把諸如資料庫中字典值是否存在等要訪問資料庫的驗證放在數據中驗證,這樣的話就可以減少訪問資料庫的次數。把再客戶端驗證過的數據,不管是通過的不同過的都插入到temp表中,只是state值不同。 3.然後怎麼把插入temp中數據分別插入到不同的數據表中了,大家一定想到了觸發器,沒有錯,我用的就是after觸發器,在我把excel中的數據插入到temp表中的時候,那麼就會觸發after觸發器,在觸發器中對插入的數據進行處理,如果插入的數據state值為-1,代表在代碼端的驗證就沒有通過,那麼就不需要進行下一步處理了,如果state值為0,那麼在觸發器中接著處理,比如檢測字典值在字典表中存不存在等,如果不滿足要求就把temp表中的當前插入的記錄state值改成-1,把校驗失敗原因更新到failReason欄位中,不再處理。如果一切校驗都沒有問題的話,那麼就編寫插入語句,把數據插入到不同的表中去。 4.數據導入完成了,那麼那些有問題數據怎麼辦了?把它查詢出來生成一個按原模板後加一列「失敗原因」導成excel文件,其實就是state值為-1的那些記錄,然後返回給用戶查看。 通過以上步驟之後那麼整個導入功能就完成了,以上只是一種思路,望大家完善。 本站技術原創欄目文章均為中睿原創或編譯,
Ⅲ mysql資料庫插入數據很慢
1.逐步排除法,輸出幾個重要步驟的執行時間,找出導致代碼執行時間慢的真正原因,看看是讀取excel慢還是插入資料庫慢或者其他原因