索引的優勢和劣勢
索引簡單來說是排好序的資料結構,所以它能大幅度的提高查詢效率,降低資料排序的成本,降低資料庫的IO成本,
但是索引也同樣占用很大空間,通常是以索引檔案的形式存盤在磁盤上,并且更新資料的同時得更新相應的索引,
總的來說:索引能提高查詢效率,但降低更新效率,所以經常更新的表盡量不要加索引
索引的分類和索引命令陳述句
索引分類
- 單值索引:一個索引只包含單個列,一個表可以有多個單值索引,
- 唯一索引:索引列的值必須唯一,但允許有空值
- 復合索引:一個索引包含多個列
一張表建議建立索引不要超過五個
基本語法
- 創建:
(1)CREATE [UNIQUE] INDEX indexname ON mytable(columnname(length));
(2)ALTER mytable ADD [UNIQUE] INDEX [indexname] ON (columnname(length)); - 洗掉:DROP INDEX [indexname] ON mytable;
- 查看:SHOW INDEX FROM table_name\G;
(\G存在的情況下列形式顯示,不存在的情況下行形式顯示) - 使用ALTER命令:ALTER TABLE mytable ADD (PRIMARYKEY)((UNIQUE|INDEX|FULLTEXT)indexname)(column_list);
PRIMARYKEY:唯一索引(主鍵索引,一般自動添加),索引值唯一,且不能為null,
UNIQUE:唯一索引,索引值唯一,可出現null,且null可重復出現,
INDEX:普通索引,索引值可出現多次,
FULLTEXT:全文索引,
判斷是否適合建索引
適合建立索引的情況
- 主鍵自動建立唯一索引
- 頻繁作為查詢條件的欄位
- 查詢中與其它表關聯的欄位
- 查詢中排序的欄位
- 查詢中統計或分組的欄位
不適合建立索引的情況
- 頻繁更新的欄位(更新不止是更新記錄,還得更新索引)
- Where陳述句用不到的欄位
- 表的記錄不多
- 頻繁增刪改的表
- 資料列大量重復內容(如:性別,只有 男,女)
一般來說復合索引優于單值索引
性能分析
MySql Query Optimizer
MySql自帶的查詢優化器,MySql有專門負責優化SELECT陳述句的優化器模塊,
MySql 常見瓶頸
- CPU:CPU在飽和的時候,一般發生在資料裝入記憶體或者從磁盤讀取資料的時候,
- IO:磁盤I/O瓶頸常發生在裝入資料遠大于記憶體容量的時候,
- 服務器硬體問題,
想知道關于如何使用EXPLAIN,用EXPLAIN得出SQL陳述句優化結論點此鏈接:SQL優化-EXPLAIN
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/13317.html
標籤:其他
上一篇:【強網杯2019】隨便注
