- redis 或者 memcache 快取減少資料庫壓力
- 資料庫安全
- 外網不可訪問(3306埠)
- 禁止弱口令
- 使用者管理許可權,給每個資料庫分配單獨的賬號,甚至根據實際情況,設定賬號的可讀可寫許可權
- 禁用root許可權操作
- ip白名單限制其它ip訪問
- 資料庫定時備份
- 資料庫的基本配置
- 最大連線數
- innodb_lock_wait_timeout 鎖超時時間(秒)
- tmp_table_size 臨時表數量
- 資料庫儲存引擎,innodb與myisam 的取捨
- 三正規化,每列的原子性,每行的唯一性,資料的去冗餘,以及反三正規化
- 資料庫欄位型別取捨,sql語句的最佳化
- 基本的索引,主鍵、唯一索引、普通索引、組合索引、最左原則
- eplain 或者 desc 執行計劃,檢視並分析具體sql語句中索引的使用情況
- 設定慢查詢引數,開啟慢查詢日誌,分析執行慢的sql語句進行最佳化
- profile 檢視具體執行時間,找出執行慢的sql語句並進行最佳化
- 事務的四大特性:
- 原子性,要麼一起成功,要麼一起回滾
- 一致性,事務執行前後,資料都是合法狀態
- 隔離性,預設隔離級別,可重複讀
- 永久性,執行成功,則儲存到了硬碟中
- 事務隔離性帶來的問題,髒讀、不可重複讀、幻讀
- 髒讀:事務A讀取了事務B更新的資料,然後B回滾操作,那麼A讀取到的資料是髒資料
- 不可重複讀:事務 A 多次讀取同一資料,事務 B 在事務A多次讀取的過程中,對資料作了更新並提交,導致事務A多次讀取同一資料時,結果 不一致。
- 幻讀:系統管理員A將資料庫中所有學生的成績從具體分數改為ABCDE等級,但是系統管理員B就在這個時候插入了一條具體分數的記錄,當系統管理員A改結束後發現還有一條記錄沒有改過來,就好像發生了幻覺一樣,這就叫幻讀。
- 小結:不可重複讀的和幻讀很容易混淆,不可重複讀側重於修改,幻讀側重於新增或刪除。解決不可重複讀的問題只需鎖住滿足條件的行,解決幻讀需要鎖表
- 隔離級別
- 讀未提交,髒讀:是,不可重複讀:是,幻讀:是
- 不可重複讀,髒讀:否,不可重複讀:是,幻讀:是
- 可重複讀,髒讀:否,不可重複讀:否,幻讀:是,mysql預設隔離級別,
- 序列化,,髒讀:否,不可重複讀:否,幻讀:否
- 鎖,表鎖、行鎖、排它鎖、意向鎖、迴圈鎖(死鎖)、讀鎖(共享鎖)、寫鎖(排它鎖),自動提交、手動開啟共享鎖、手動開啟排它鎖、等鎖概念
- 查詢快取(查詢快取的弊端),分析查詢快取的使用情況和命中率
- 對於資料量較大的資料比如資料量超千萬,進行邏輯分割槽,邏輯分割槽可以根據
- list 條件分割槽,根據“欄位的內容值”是否在某個“列表”中進行分割槽,透過預定義的列表的值來對資料進行分割
- range 範圍分割槽,根據“欄位內容的值”是否在 某個範圍進行分割槽,透過預定義的範圍值來對資料進行分割
- hash 雜湊分割槽,只能針對整數進行,允許透過對錶的一個或多個列的Hash Key進行計算,最後透過這個Hash碼不同數值對應的資料區域進行分割槽
- key 分割槽,KEY分割槽支援除text和BLOB之外的所有資料型別的分割槽
- 進行物理分表(水平分表),比如使用者日誌,可以根據每月一張表來進行物理分表,透過應用程式進行控制
- 進行垂直分表,把冷熱欄位分開來設計,減少資料庫的資源開銷
- 主從複製,讀寫分離,根據主資料庫的二進位制日誌去同步資料到從資料庫。
- 全文索引,用 sphinx 或者 es 或者 框架自帶的全文索引元件
相關連結:
mysql 效能最佳化方向 https://www.cnblogs.com/AloneSword/p/3207697.html
MySQL效能的五大配置引數 https://blog.csdn.net/xifeijian/article/details/19775017
本作品採用《CC 協議》,轉載必須註明作者和本文連結