1. 程式人生 > >MySQL資料庫索引及優化

MySQL資料庫索引及優化

索引

什麼是索引

索引是用來提高資料庫效能的常用工具,索引就像資料的目錄一樣,通過索引可以快速找到需要的內容。

索引的原理,加快查詢

索引是建立了針對資料內容的排序結果的指標,根據指標快速定位所要的資料。

索引的設計原則

1  索引列一般為where子句中的列或連線列子句中的列。

2  儘量不對基數小的列做索引。

3  儘可能使用短索引,如果對字元列索引儘量指定最小長度。

4  複合索引字首特性,索引的順序很重要。

  建立複合索引時將最常用限制條件列放在最左邊,一次遞減。

5  避免出現無用的索引。

6  InnoDB儘量指定主鍵。

避免過度使用索引

1  索引的建立對提高檢索能力有用,但是對資料庫維護很費資源。

2  對選擇性不高的列(例如性別)過度索引,影響插入更新速度。

3  索引會佔用磁碟空間,降低寫操作,執行計劃要考慮各個索引。

4  索引不是越多越好。

索引語法

1  建立索引語法

Syntax:
CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name
    [index_type]
    ON tbl_name (index_col_name,...)
    [index_option
] [algorithm_option | lock_option] ...

2  刪除索引

Syntax:
DROP INDEX index_name ON tbl_name
    [algorithm_option | lock_option] ...

3  查看錶索引

mysql> show index from t1;

更多語法用幫助檢視

mysql> help create index
mysql> help alter table

索引型別

1  主鍵索引

2  唯一索引

3  複合索引

4  覆蓋索引

5  函式索引

6  分割槽索引

優化

1  硬體軟體優化。

  硬體:cpu、記憶體、硬碟(效能ssd > sas > sata)、磁碟raid

  軟體:作業系統(x86_64)、MySQL(編譯安裝)

2  引數優化(my.cnf)。

  監控(show global status \G)、工具(mysqlreport)

3  SQL語句的優化。 

  1.索引的優化。

    a 抓出慢sql,配置my.cnf,或白名單機制

     long_query_time=2 #大於2秒就記錄

       log-slow-queries=/data/3306/slow-log.log # 按天輪詢 按天分析

    b 慢查詢日誌分析工具

      mysqlsla

    c 處理:每天晚上0點定時分析慢查詢。

  2.SQL語句的拆分(大的複雜的SQL語句拆分成小的)。

    子查詢、join連表查詢

  3.資料庫是儲存資料的地方,計算功能儘量放在前端應用程式。

  4.搜尋功能,一般不要用資料庫。

4  架構的優化。

  1.業務上進行拆分(像搜尋 like)

  2.資料庫前端必須加快取cache,例:memcached。

  3.某些業務使用nosql持久化儲存,例:memcahcedb,redis。

  4.動態的資料靜態化,整個檔案靜態化,頁面片段靜態化。

  5.資料庫叢集與讀寫分離,一主多從等,通過程式或dbproxy進行叢集讀寫分離。

  6.單表超過千萬,拆庫拆表。

5  流程制度安全優化。 

   1.任何一次人為資料庫記錄的更新都要走流程。

   2.客戶端管理。