普通索引: 無限制 , 允許空和重複 , 純粹為查詢更快
唯一索引: 可為空 , 但空只能為乙個
主鍵索引: 不允許為空
組合索引: 多列 , 最左字首原則 , 如: 組合索引列(a , b , c) , 則查詢sql中 where a = * 可以使用索引 , where b = * 不可使用
全文索引
空間索引
非聚簇索引(非聚集索引): 索引樹的葉子節點存資料的位址資訊 (myisam的索引)
聚簇索引(聚集索引): 資料存在索引樹的葉子節點 (innodb的索引)
覆蓋索引: 索引包含了所需查詢語句和條件中的字段
執行每一條sql時 , mysql只使用其中的乙個索引;
索引提高查詢速度 , 但降低了資料更新速度 , 所以索引不是越多越好 , 無用的冗餘的索引去刪除
不要使用 like 「%test%」 , 全匹配則使得索引無效
資料型別越小越好 , 減少儲存空間
簡單的資料型別更好
盡量避免null , 建立表時每個字段最好都加上not null , 因為mysql對null有特殊處理 , 要減少對null的處理
清楚最左字首 , 索引只對組合索引中的最左邊那一列有效
減少每次sql操作的資料量 , 是否請求了不需要的資料(列 或者 行)
innodb引擎的索引和具體資料是在同乙個檔案 , 即索引樹中包含所有字段資料; myisam引擎的索引和具體資料是在兩個檔案中 , 通過索引樹的葉子節點上的位址去資料檔案拿資料
innodb 支援行鎖 , 支援事務; myisam支援表鎖 , 不支援事務
建立表時設定索引後 , 生成對應的索引樹檔案 , 新增和修改資料時都會修改索引檔案
對索引查詢檢索資料時 , 用where去過濾掉一些不匹配的行(extra: using where)
用explain 去檢視sql語句的執行狀況
使用覆蓋索引避免訪問的行(extra: using index)
需要對資料進行彙總或者獲取彙總結果時 , 可以新增彙總表 , 將分析的彙總結果進行儲存 , 便於直接讀取 , 盡量不要每次需要都進行一次計算彙總
將乙個複雜的查詢分解成多個簡單的查詢
對需要處理大量資料的語句批量進行處理 , 如: 需要處理10000000條資料 , 可以分10000次然後每次處理1000條
使用自增id做primary key , 業務主鍵做unique key
一般status , type , gender 這類列舉值很少的字段 , 不適合單獨作為索引字段
原子性: 即在乙個事務中的所有sql語句要麼全部都完成要麼全部都失敗 , 像是乙個完整的統一的個體
一致性: 即事務執行前後 , 資料的狀態是一致的 , 如: a和b銀行轉賬 , 不管a和b中間如何交易 , 事務提交前a和b總共5000 , 事務完成後a和b總共還是5000
隔離性: 不同的事務之間相互不影響
永續性: 事務完成後資料就永遠改變並儲存下來
MySQL慢查詢優化 索引優化 以及表等優化總結
mysql資料庫常見的兩個瓶頸是 cpu和i o的瓶頸。cpu在飽和的時候一般發生在資料裝入記憶體或從磁碟上讀取資料時候。磁碟i o瓶頸發生在裝入資料遠大於記憶體容量的時候,如果應用分布在網路上,那麼查詢量相當大的時候那麼平瓶頸就會出現在網路上。我們可以用mpstat,iostat,sar和vmst...
MySQL慢查詢優化 索引優化 以及表等優化總結
mysql資料庫常見的兩個瓶頸是 cpu和i o的瓶頸。cpu在飽和的時候一般發生在資料裝入記憶體或從磁碟上讀取資料時候。磁碟i o瓶頸發生在裝入資料遠大於記憶體容量的時候,如果應用分布在網路上,那麼查詢量相當大的時候那麼平瓶頸就會出現在網路上。我們可以用mpstat,iostat,sar和vmst...
mysql 優化 聚集索引 mysql 索引優化
一.聚集索引 clustered index innodb預設依據主鍵列聚集,myisam不使用 特點 b樹每個葉子包含實際資料行,資料按照索引順序地儲存在物理頁上。優點 1.範圍查詢,獲取指定id的全部資料只需從磁碟讀取少量資料頁 如果不使用聚集索引,每條資料可能引起一次磁碟io。2.由於索引和資...