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.客戶端管理。