mysql的一些問題(僅作記錄)

2021-08-25 13:24:25 字數 1263 閱讀 3369

1、在資料系統中如何使用 merge 來進行分表,出現了哪些問題?

答:因為 merge 總表的主鍵和唯一索引無效,導致 replace into 語法對 merge 總表不起作用,所以可能出現各個 merge 子表存在相同主鍵的情況,產生資料錯誤。

2、(見影印紙)在 employees1 和 employees2 中是否會出現相同主鍵的記錄,何種情況出現,現在使用的解決方法是什麼?

假設插入記錄 r1 到 employees 總表中,因為我們設定了是插入到 employees1 中,如果此時 employees2 存在跟 r1 相同主鍵的記錄,那麼該記錄就在兩個子表中都存在。

目前資料系統的解決方法是,在插入資料前,先將舊的記錄刪除(通過主鍵匹配),然後再插入。這個方法存在隱患,例如刪除成功但插入失敗,還有刪除之後、插入之前,資料會有一段空白時間。

3、在對 employess 表進行 replace 操作時採用先刪後插的方法時候會存在隱患,是否可以通過進行鎖表和事務來解決?

答:因為 merge 只支援 myisam,而 myisam 不支援事務,所以事務並不能解決這個隱患。

目前想到的解決該隱患的方法是,每次插入之前,都先判斷一下該條記錄屬於哪個子表,然後就直接 replace 到該子表進去,而不是 replace 到總表,這樣主鍵、唯一索引就能生效,然後正確地 replace。

這個改動目前仍未實施,因為考慮到發生問題的可能性較小,而且目前正忙於準備上海資料系統的上線,所以計畫待上海資料系統的開發大體完成,或者上線之後,再改這個bug。

4、partition是否可以使用不帶分割槽字段限制條件的語句來查詢,分割槽的效能如何?

答:查詢中可以不包含分割槽字段,但這樣會使得分割槽的功能無效,直接查詢總表。

關於分割槽的效能,我們自己還沒有實際的環境進行測試,但可以參考這篇文章: 。

5、針對資料分表,可否用這樣的設計:乙個總表來做資料的同步更新和完整資料的查詢,然後再建乙個小表,只儲存最頻繁查詢的部份資料,小表的更新則是非同步的?

答:這樣的設計可以解決上述資料分表時的隱患,值得考慮。

6、explain中出現了所謂的偏差是怎麼回事?

舉乙個簡單的例子,執行 "explain select * from tbl limit 10",實際上只會掃瞄10條記錄,但 explain 結果的 rows 顯示的不是10,而是 tbl 表的總數。這是因為 explain 沒有把 limit 考慮進去(好像新版本的 mysql 解決了這個問題,有待查證)。

關於 explain 的限制和偏差的更多資訊,請參考這篇文章: 。

mysql的一些問題的記錄

今天早上登陸資料庫的時候發現如下問題 1.error 2002 hy000 can t connect to local mysql server through socket tmp mysql.sock 2 網上查詢到這篇文章 發現一直找不到mysql.sock這個檔案 看了下面這篇之後 發現m...

mysql 一些問題

1 中文亂碼 問題 推薦用 uft 8 編碼 適配一切介面,mysql中 發生中文亂碼時 開啟mysql 安裝路徑 更改後 重啟mysql 服務即可,有時也需要 重新匯入資料庫 可能是與 source 檔案時 編碼沒有設定好 client password your password port 33...

mysql 的一些問題

1.問題 c 環境 使用mysqlclient.lib 建立mysql連線後 執行 mysql query pmysql,delimiter 報錯 系統提示 這是一句錯誤的指令 解決方案 delimiter是mysql工具集的命令,只能在mysql控制台使用或mysql的指令碼檔案直接注入,不可以在...