標籤:mysql 解決 字元集 變更 命名 pair 報錯 指定 資源
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種定序。
MYSQL資料庫表定序不一致導致聯表查詢,索引不起作用問題