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