MySql資料庫索引介紹

2021-09-23 18:35:51 字數 1853 閱讀 8942

資料庫索引對我們來說是透明的,因為資料庫表建立索引前後,sql語句都可以正常執行,索引的運用只是資料庫引擎工作時候的優化手段。但是,這並不是說資料庫索引僅僅是資料庫設計開發人員和運維人員的事情,對於乙個測試人員,如果對資料庫中已有的索引有所了解,可以對測試過程中發現的涉及資料庫操作的問題進行深入分析,知其所以然。

索引分單列索引和組合索引。單列索引,即乙個索引只包含單個列,乙個表可以有多個單列索引,但這不是組合索引。組合索引,即乙個索包含多個列。

mysql支援的索引包括index、unique、primary key、fulltext型別的索引。

1、普通索引index

這是最基本的索引型別,而且它沒有唯一性之類的限制,多行記錄可以包含相同值。普通索引可以通過以下幾種方式建立:

2、唯一性索引

和「普通索引」基本相同,但有乙個區別:索引列的所有值都只能出現一次,即必須唯一,但允許有空值。如果是組合索引,則列值的組合必須唯一。

唯一性索引可以用以下幾種方式建立:

建立了乙個 mytable表,來進一步說明下組合索引:

create table mytable(   id int not null,    username varchar(16) not null,   city varchar(50) not null,   age int not null  ); 

為了進一步提供mysql的效率,就要考慮建立組合索引。如下語句將 name, city, age建到乙個索引裡:

alter table mytable add index name_city_age (username(10),city,age);

建表時,usernname長度為 16,這裡用 10。這是因為一般情況下名字的長度不會超過10,這樣會加速索引查詢速度,還會減少索引檔案的大小,提高insert的更新速度。

如果分別在 usernname,city,age上建立單列索引,讓該錶有3個單列索引,查詢時和上述的組合索引效率也會大不一樣,遠遠低於我們的組合索引。雖然此時有了三個索引,但mysql只能用到其中的那個它認為似乎是最有效率的單列索引。

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

usernname,city,age ;usernname,city;  usernname。

為什麼沒有 city,age這樣的組合索引呢?這是因為mysql組合索引「最左字首」的結果。簡單的理解就是只從最左面的開始組合。並不是只要包含這三列的查詢都會用到該組合索引,下面的幾個sql就會用到這個組合索引:

select * from mytable whree username="admin" and city="鄭州"  select * from mytable whree username="admin"

而下面幾個則不會用到:

select * from mytable whree age=20 and city="鄭州"  select * from mytable whree city="鄭州"

3、主鍵

主鍵是一種特殊的唯一性索引,不允許有空值,但它必須指定為「primary key」。一般是在建表的時候同時建立主鍵索引,例如create table tablename ( [...], primary key (列的列表) );」。也可以通過修改表的方式加入主鍵,例如「alter table tablename add primary key (列的列表); 」。注意:每個表只能有乙個主鍵。

4、全文索引

全文索引fulltext可以在varchar或者text型別的列上建立。它可以通過create table命令建立,也可以通過alter table或create index命令建立。對於大規模的資料集,通過alter table(或者create index)命令建立全文索引要比把記錄插入帶有全文索引的空表更快。

MySQL 資料庫索引介紹

索引就是加快檢索表中資料的方法。資料庫的索引類似於書籍的索引。在書籍中,索引允許使用者不必翻閱完整個書就能迅速地找到所需要的資訊。在資料庫中,索引也允許資料庫程式迅速地找到表中的資料,而不必掃瞄整個資料庫。mysql好比跑車,而沒有設計和使用索引的mysql就想乙個人力三輪車,沒有索引的表 資料量在...

mysql資料庫索引的介紹

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

資料庫mysql索引 資料庫 mysql索引

mysql 索引 mysql索引的建立對於mysql的高效執行是很重要的,索引可以大大提高mysql的檢索速度。打個比方,如果合理的設計且使用索引的mysql是一輛蘭博基尼的話,那麼沒有設計和使用索引的mysql就是乙個人力三輪車。索引分單列索引和組合索引。單列索引,即乙個索引只包含單個列,乙個表可...