MySQL 設置唯一鍵約束(unique)

前言:

最近在優化一個功能,這個功能就是將80000 條數據按照分頁分段獲取,首先獲取的是前1000條數據,將這些數據按照一定的規則解析完以後,使用 jdbcTemplate 的batchUpdate 批量導入功能將數據保存到數據庫中,這1000條數據解析的時間隨着表中數據不斷累加而加長,因爲我這個豬腦子寫了一個有則不添加數據,無則添加數據的邏輯,導致這速度是不忍直視。

後面在優化過程我想着不如給表設置一個唯一約束吧,

在Native Premiumn中設計一下表,點到索引裏面,將我下面這些值設置進去。由於我想將description這個字段設置成唯一約束,但是MySql 報錯了,提示字段長度過長無法設置,此時我這個description字段的類型是text

 

後面問了一下度娘 ,提供了一個好的解決辦法,重新建一個字段,將原來description中的值通過md5 加密的方式保存到數據庫,通過對這個新添加的description_md5這個字段設置唯一約束,當然了,加密方式可以自由選擇,這樣的話 唯一約束也已經建立起來。description_md5 這個字段的最大長度爲255。

 

 

最後一個重要環節出來了,當我將一個字段插入到數據庫成功後,第二次遇到相同字段的值程序直接報錯。

在使用jdbcTemplate 保存的時候我的sql用的是insert ,將這個insert into 換成replace 已解決。

replace 第一次插入數據成功,第一次會將原來的數據刪除,重新生成一條,百度上還有一種方式是insert 字段替換爲ingore,我試了一下沒有效果。

參考文章:https://blog.csdn.net/tomcat_zhu/article/details/82911158

 

最後小夥伴們可能有些疑問,第一個問題可能是爲什麼我要用jdbcTemplate的批量導入功能,而不使用JPA 等方法,原因是小編這個功能的數據量很大,小編測試過了 在大數據的情況下,使用jdbcTemplate的批量導入的寫法會將JPA的快, 50w數據能快2,3分鐘。

第二個疑問是小編你的技術還不是很過關啊 

哈哈 我接受。小編會努力的。

如果你有什麼好的解決辦法的話歡迎評論區留言互動,

如果覺得小編寫的不錯的話,不妨給小編一個贊吧 哈哈!

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章