MySQL索引記錄

以ftdp項目來說,其多個數據表都會對經常被查詢的字段添加索引,比如tin_comments表中針對5個字段設計了BTREE索引。

一、對比測試

mysql> SELECT id,FROM_UNIXTIME(time) FROM article WHERE a.ti='標題'
給ti字段添加一個BTREE索引:

mysql> ALTER TABLE article ADD INDEX index_article_ti ON ti(200);

二、MySQL索引的概念
索引是一種特殊的文件(InnoDB數據表上的索引是表空間的一個組成部分),它們包含着對數據表裏所有記錄的引用指針。

索引分爲聚簇索引和非聚簇索引兩種,聚簇索引是按照數據存放的物理位置爲順序的,而非聚簇索引就不一樣了;聚簇索引能提高多行檢索的速度,而非聚簇索引對於單行的檢索很快。

三、索引的類型
1、普通索引
這是最基本的索引,它沒有任何限制,比如上文中爲title字段創建的索引就是一個普通索引
創建方式:

直接創建索引
CREATE INDEX index_name ON table(column(length))

修改表結構的方式添加索引
ALTER TABLE table_name ADD INDEX index_name ON (column(length))

刪除索引
DROP INDEX index_name ON table

2、唯一索引
與普通索引類似,不同的就是:索引列的值必須唯一,但允許有空值。如果是組合索引,則列值的組合必須是唯一的,創建方法和普通索引類似。

創建唯一索引
CREATE UNIQUE INDEX index_name ON table(column(length)) 

修改表結構
ALTER TABLE table_name ADD UNIQUE INDEX index_name ON (column(length))
3、組合索引
平時用的SQL查詢
語句一般都有比較多的限制條件,所以爲了進一步榨取MySQL的效率,就要考慮建立組合索引。例如上表中針對ti和t建立一個組合索引:

ALTER TABLE article ADD INDEX index_titme_time (ti(5),t(1))

建立這樣的組合索引,其實是相當於分別建立了下面兩組組合索引:

–title,t

–title

爲什麼沒有time這樣的組合索引呢?這是因爲MySQL組合索引“最左前綴”的結果。
簡單的理解就是隻從最左面的開始組合。並不是只要包含這兩列的查詢都會用到該組合索引,如下面的幾個SQL所示:

使用到上面的索引
SELECT * FROM article WHREE ti='檢查' AND t=1;

SELECT * FROM article WHREE ti='檢查';

未使用到上面的索引
SELECT * FROM article WHREE t=1;

以上就是常用的三種索引類型及其創建使用的方法,當然還有其他的類型,這裏我就列舉我們平時最常用的幾種,更詳細和全面的索引相關資料請諮詢度娘。


 

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