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