天天看點

MYSQL索引類型+索引方法

MYSQL索引有四種

PRIMARY(唯一且不能為空;一張表隻能有一個主鍵索引)、

INDEX(普通索引)、

UNIQUE(唯一性索引)、

FULLTEXT(全文索引:用于搜尋很長一篇文章的時候,效果最好。用在比較短的文本,如果就一兩行字的,普通的 INDEX 也可以)

ALTER TABLE t_user ADD INDEX name_city_phone(USERNAME,CITY,PHONE)  //普通複合索引

ALTER TABLE t_user ADD UNIQUE name_city_phone(USERNAME,CITY,PHONE) //唯一複合索引      

  這樣的組合索引,其實相當于分别建立了三個索引。

  為什麼沒有(CITY,PHONE)索引這是因為MYSQL組合查詢隻從最左邊開始組合:始終包含username

  1.USERANME,CITY,PHONE  

  2.USERNAME,CITY  

  3.USERNAME,PHONE

  并不是查詢語句包含這三列就會用到該組合索引:

  這樣的查詢語句才會用到建立的組合索引

SELECT * FROM t_user where USERNAME="parry" and CITY="廣州" and PHONE="180"
SELECT * FROM t_user where USERNAME="parry" and CITY="廣州"
SELECT * FROM t_user where USERNAME="parry" and PHONE="180"       

  這樣的查詢語句是不會用到建立的組合索引 

SELECT * FROM t_user where CITY="廣州" and PHONE="180"
SELECT * FROM t_user where CITY="廣州"

雖然索引提高了查詢的速度,但是降低了INSERT、UPDATE、DELETE(DML)的速度,因為在插入、修改、删除資料時,還要同時操作一下索引檔案;      

 索引使用注意事項:

1.索引會忽略null值,是以我們在設計資料庫的時候設定為為NOT NULL;

2.短索引(給索引設定長度)不僅能夠提高查詢速度,而且能節省I/O操作。

3.  Mysql在查詢的時候隻會使用一個索引

4. 不鼓勵使用like對索引操作:like"%aaa%"不會使用索引;但like“aaa%”會使用索引。即可以對固定起始值模糊查詢

5.不适用于否地操作(not in , <>, !=,or)

mysql的兩種索引方法:

1.BTREE(用于對等比較,如"="和" <=>")   //<=> 安全的比對   ,用與對null值比較,語義類似is null()

2.HASH(用于非對等比較,比如範圍查詢)>,>=,<,<=、BETWEEN、Like

轉載:https://www.cnblogs.com/brxHqs/p/9722113.html

繼續閱讀