mysql 優化:mysql
每一個innodb 表都要有一個主鍵
限制表上索引的數量,避免創建重複和冗餘索引
注意合理選擇複合索引鍵值的順序sql
優先選擇符合存儲須要的最小的數據類型
varchar(N) 中的N 表明的是字符數,而不是字節數
使用UTF8 存儲漢字 varchar(255) = 765 個字節
過大的長度會消耗更多的內存
避免使用text,blob 數據類型數據庫
避免使用join 關聯太多的表
每join 一個表會多佔用一部份內存(join_buffer_size)
會產生臨時表操做,影響查詢效率
mysql 最多容許關聯61個表,建議不超過5個函數
減小同數據庫的交互次數
數據庫更適合處理批量操做
合併多個相同的操做到一塊兒,能夠提升處理效率優化
使用in 代替or
in 的值 不要超過 500個
in 操做能夠有效的利用索引日誌
禁止使用 order by rand() 進行隨機排序
會把全部符合條件的數據裝載到內存進行排序
會消耗大量的CPU 和IO 及內存資源
推薦在程序中獲取一個隨機值,而後從數據庫中獲取數據的方式排序
where 從句中禁止對列進行函數轉換和計算
對列進行函數轉換或計算會致使沒法使用索引索引
在明顯不會有重複值時使用union all 而不是 union
union 會把全部數據放到臨時表中後再進行去重操做
union all 不會再對結果集進行去重操做
super 權限只能留給DBA 處理問題的帳號使用事務
對於程序鏈接數據庫帳號,遵循權限最小原則內存
拆分複雜的大SQL 爲多個小SQL
mysql 一個SQL 只能使用一個CPU 進行計算
sql 拆分後能夠經過並行執行來提升處理效率
超過100萬行的批量寫操做,要分批屢次進行操做
大批量操做可能會形成嚴重的主從延遲
binlog 日誌爲row 格式是會產生大量的日誌
避免產生大事務操做
禁止爲程序使用的帳號賦予super 權限 當達到最大鏈接數限制時,還容許1個有super 權限的用戶鏈接