首頁  >  文章  >  資料庫  >  mysql中什麼是非叢集索引?

mysql中什麼是非叢集索引?

coldplay.xixi
coldplay.xixi原創
2020-06-29 16:17:322384瀏覽

mysql中非聚簇索引是索引的存儲和數據的存儲是分離的,也就是說找到了索引但沒找到數據,需要根據索引上的值即主鍵再次回表查詢,非聚簇索引也叫做輔助索引。

mysql中什麼是非叢集索引?

mysql中非聚集索引是:

索引的儲存和資料的儲存是分開的,也是說找到了索引但沒找到數據,需要根據索引上的值(主鍵)再次回表查詢,非聚集索引也叫做輔助索引。

一個範例

下面我們建立了一個學生表,做三種查詢,來說明什麼情況下是叢集索引,在什麼情況下不是。

create table student (
    id bigint,
    no varchar(20) ,
    name varchar(20) ,
    address varchar(20) ,
    PRIMARY KEY (`branch_id`) USING BTREE,
    UNIQUE KEY `idx_no` (`no`) USING BTREE
)ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;

相關學習推薦:mysql視訊教學

#第一種,直接根據主鍵查詢取得所有欄位數據,此時主鍵是聚簇索引,因為主鍵對應的索引葉子節點儲存了id=1的所有欄位的值。

select * from student where id = 1

 

第二種,根據編號查詢編號和名稱,編號本身是一個唯一索引,但查詢的列包含了學生編號和學生名稱,當命中編號索引時,該索引的節點的資料儲存的是主鍵ID,需要根據主鍵ID重新查詢一次,所以這種查詢下no不是聚集索引

select no,name from student where no = 'test'

 

##第三種,我們根據編號查詢編號(有人會問知道編號了還要查詢?要,你可能需要驗證該編號在資料庫中是否存在),這種查詢命中編號索引時,直接傳回編號,因為所需要的資料就是該索引,不需要回表查詢,這種場景下no是叢集索引

select no from student where no = 'test'

 

#總結:

主鍵一定是叢集索引,

MySQL的InnoDB中一定有主鍵,即便研發人員不手動設置,則會使用unique索引,沒有unique索引,則會使用資料庫內部的一個行的id來當作主鍵索引,其它普通索引需要區分SQL場景,當SQL查詢的欄位就是索引本身時,我們稱這種場景下該普通索引也可以叫做叢集索引,MyisAM引擎沒有叢集索引。

以上是mysql中什麼是非叢集索引?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn