MySQL中索引總結

2021-08-09 06:34:01 字數 2251 閱讀 8376

索引的型別:

普通索引:這是最基本的索引型別,沒唯一性之類的限制。

唯一性索引:和普通索引基本相同,但所有的索引列只能出現一次,保持唯一性。

主鍵:主鍵是一種唯一索引,但必須指定為"primary key"。

全文索引:全文索引的索引型別為fulltext。全文索引可以在varchar或者text型別的列上建立。

索引的操作

使用alter table語句建立索引。

alter table table_name add index index_name (column_list) ;

alter table table_name add unique (column_list) ;

alter table table_name add primary key (column_list) ;

使用create index語句對錶增加索引。

create index index_name on table_name (column_list) ;

create unique index index_name on table_name (column_list) ;

刪除索引

drop index index_name on table_name ;

alter table table_name drop index index_name ;

alter table table_name drop primary key ;

檢視索引

show index from table_name;

如何使用索引

1、在經常進行連線的字段,建立索引

2、在排序或分組的列上建立索引

3、在條件表示式中建立所因(where),情況有兩種

不同值較多的列上使用索引,

不同值較少的列上不適用索引

4、待排序的列有多個,可以在這些列上建立復合索引

5、可以建立短索引,例如:

alter table table_name add index index_name(column_list(length))

alter table test add index ab(`a`(3));

6、join中出現的列需要建立索引

注意事項:

1、索引不會包含有null值的列

2、mysql查詢只使用乙個索引,因此如果where子句中已經使用了索引的話,那麼order by中的列是不會使用索引的。因此資料 

庫預設排序可以符合要求的情況下不要使用排序操作;盡量不要包含多列的排序,如果需要最好給這些列建立復合索引。

3、不要在列上進行運算

4、以萬用字元%和_開頭作查詢時,mysql不會使用索引。

5.如果條件中有or,即使其中有條件帶索引也不會使用(這也是為什麼盡量少用or的原因)

要想使用or,又想讓索引生效,只能將or條件中的每個列都加上索引

6.對於多列索引,不是使用的第一部分,則不會使用索引

7.如果列型別是字串,那一定要在條件中將資料使用引號引用起來,否則不使用索引

8.如果mysql估計使用全表掃瞄要比使用索引快,則不使用索引

組合索引

組合索引的最左優先原則,組合索引的第乙個字段必須出現在查詢組句中,這個索引才會被用到。

如果有乙個組合索引(col_a,col_b,col_c)

下面的情況都會用到這個索引:

col_a = "some value";

col_a = "some value" and col_b = "some value";

col_a = "some value" and col_b = "some value" and col_c = "some value";

col_b = "some value" and col_a = "some value" and col_c = "some value";

對於最後一條語句,mysql會自動優化成第三條的樣子~~。

下面的情況就不會用到索引:

col_b = "aaaaaa";

col_b = "aaaa" and col_c = "cccccc";

mysql 索引總結 mysql索引總結

mysql中每乙個表都有乙個聚簇索引clusted index,該所索引是預設建立的,除此之外的表上的每乙個非聚簇索引都是二級索引,又叫輔助索引 secondary indexes 以innodb來說,每個innodb表具有乙個特殊的索引稱為聚集索引,如果您的表上定義有主鍵,該主鍵索引是聚集索引,如...

mysql次級索引 MySQL 索引總結

1 索引是做什麼的?想象一下,你面前有本詞典,資料就是書的正文內容,你就是那個cpu,而索引,則是書的目錄 索引用於快速找出在某個列中有一特定值的行。不使用索引,mysql必須從第1條記錄開始然後讀完整個表直到找出相關的行。表越大,花費的時間越多。如果表中查詢的列有乙個索引,mysql能快速到達乙個...

mysql 索引總結

索引用來快速地尋找那些具有特定值的記錄,所有mysql索引都以b 樹的形式儲存。如果沒有索引,執行查詢時mysql必須從第乙個記錄開始掃瞄整個表的所有記錄,直至找到符合要求的記錄。表裡面的記錄數量越多,這個操作的代價就越高。如果作為搜尋條件的列上已經建立了索引,mysql無需掃瞄任何記錄即可迅速得到...