Mysql數據庫表排序規則不一致導致聯表查詢,索引不起作用問題
表更描述: 將mysql數據庫中的worktask表添加ishaspic字段。
具體操作:(1)數據庫worktask表新添是否有圖片字段ishaspic;新添字段時,報錯
[SQL] alter table WorkTask add ishaspic int(10) Null;
[Err] 1034 - Incorrect key file for table ‘WorkTask‘; try to repair it
解決方案:新建worktask表,添加ishaspic字段,將原worktask表中的數據插入新建表中.
(2)生產環境部署變更代碼,應用啟動后,一段時間后臺報錯
org.hibernate.exception.GenericJDBCException: Could not open connection
java.sql.SQLException: An attempt by a client to checkout a Connection has timed out.
(3)監控數據庫服務,發現查詢sql突然變慢,數據庫服務器CPU資源占用率超高。
(4)變更回退,錯誤仍然存在。
原來應用能正常運行,現在不能正常運行,監控數據庫,發現sql查詢執行時間突然變慢,單獨執行sql,發現也很慢,到達百秒級。
問題定位:在新建worktask表時,改變了表的排序規則,以至于使和所聯表的排序規則不一樣,導致聯表查詢SQL語句,索引不起作用。
解決方案:(1)將聯表查詢SQL進行拆分;(2)調整數據表的排序規則,保證所聯表數據表的排序規則一致。
*************************************************************************************
MySQL中的排序規則。在新建MySQL數據庫或表的時候經常會選擇字符集和排序規則。數據庫用的字符集大家都知道是怎么回事,那排序規則是什么呢?
排序規則:是指對指定字符集下不同字符的比較規則。其特征有以下幾點:
1、 兩個不同的字符集不能有相同的排序規則
2、 兩個字符集有一個默認的排序規則
3、 有一些常用的命名規則。如_ci結尾表示大小寫不敏感(caseinsensitive),_cs表示大小寫敏感(case sensitive),_bin表示二進制的比較(binary).
在MySQL數據庫中,可以使用show collation來查看支持的各種排序呢規則,我用的是MySQL 5.6.12-log版本的數據庫,支持219種排序規則。
原文:http://www.cnblogs.com/lmmblogs/p/6781430.html