mysql:索引

MySQL主要有兩種結構:
    Hash索引
    B+ Tree索引(InnoDB引擎)

B+ Tree索引和Hash索引區別?
    哈希索引適合等值查詢,但是無法進行範圍查詢
    哈希索引沒辦法利用索引完成排序
    哈希索引不支持多列聯合索引的最左匹配規則
    如果有大量重複鍵值的情況下,哈希索引的效率會很低,因爲存在哈希碰撞問題

覆蓋索引(covering index)指一個查詢語句的執行只用從索引中就能夠取得,不必從數據表中讀取。也可以稱之爲實現了索引覆蓋。
當一條查詢語句符合覆蓋索引條件時,MySQL只需要通過索引就可以返回查詢所需要的數據,這樣避免了查到索引後再返回表操作,減少I/O提高效率。

索引失效:
    沒有遵循最左匹配原則(組合索引的第一個字段必須出現在查詢語句中)
    or、!=、not in、is [not] null
    like '%……'
    隱式轉換
    索引字段應用內部函數或運算

三範式:
    原子性:數據列不可再分
    每一行數據具有唯一性,並消除數據之間的"部分依賴"(聯合主鍵)
    獨立性、消除傳遞依賴
    
數據庫優化:
    優化sql
    創建索引
    分表:水平分表(數據比較多)、垂直分表(字段值比較少使用)
    讀寫分離
    緩存:使用redis作爲中央緩存,在持久層(dao)和數據庫之間添加一個緩存層
    
慢查詢定位:
    set GLOBAL slow_query_log = ON;
    set GLOBAL slow_query_time = 1;
    explain 需要執行的sql;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章