mysql 索引pk mysql索引比較

2021-10-17 13:50:12 字數 1428 閱讀 7701

mysql中的表有兩種key,一種是primary key,還有secondary key。

如:create table layout_test (

col1 int not null,

col2 int not null,

primary key(col1),

key(col2)

col1是primary key,col2是secondary key。它們建立索引。

以下簡稱為pk和sk。

myisam:

在myisam中,pk和sk的資料儲存方式是一樣的。都是b-tree的葉節點上儲存行號,即資料行的指標。

innodb:

在innodb中不太一樣。

pk是以聚簇索引存在的,並且在b-tee的葉節點上存放著primary key的值和其它列的值及事務id和回滾指標。(innodb的primary index是聚簇索引)

sk的葉節點上也與myisam不太一樣,它存放著primary key的值(而不是資料的行指標)。

只有按最左邊字首查詢的才會利用上索引。

下面這段來自mysql使用手冊:

mysql> create table test (

id int not null,

last_name char(30) not null,

first_name char(30) not null,

primary key (id),

index name (last_name,first_name));

那麼索引name是乙個在last_name和first_name上的索引,這個索引將被用於在last_name或last_name和first_name的乙個已知範圍內指定值的查詢,因此,name索引將使用在下列查詢中:mysql> select * from test where last_name="widenius";

mysql> select * from test where last_name="widenius"

and first_name="michael";

mysql> select * from test where last_name="widenius"

and (first_name="michael" or first_name="monty");

mysql> select * from test where last_name="widenius"

and first_name >="m" and first_name < "n";

然而,name索引將不用在下列詢問中:mysql> select * from test where first_name="michael";

mysql> select * from test where last_name="widenius"

or first_name="michael";

mysql 雜湊索引 MySQL索引之雜湊索引

雜湊索引 hash index 建立在雜湊表的基礎上,它只對使用了索引中的每一列的精確查詢有用。對於每一行,儲存引擎計算出了被索引的雜湊碼 hash code 它是乙個較小的值,並且有可能和其他行的雜湊碼不同。它把雜湊碼儲存在索引中,並且儲存了乙個指向雜湊表中的每一行的指標。在mysql中,只有me...

mysql主鍵索引 MySQL索引之主鍵索引

在mysql裡,主鍵索引和輔助索引分別是什麼意思,有什麼區別?上次的分享我們介紹了聚集索引和非聚集索引的區別,本次我們繼續介紹主鍵索引和輔助索引的區別。1 主鍵索引 主鍵索引,簡稱主鍵,原文是primary key,由乙個或多個列組成,用於唯一性標識資料表中的某一條記錄。乙個表可以沒有主鍵,但最多只...

mysql聚集索引 MySQL索引之聚集索引介紹

在mysql裡,聚集索引和非聚集索引分別是什麼意思,有什麼區別?在mysql中,innodb引擎表是 聚集 索引組織表 clustered index organize table 而myisam引擎表則是堆組織表 heap organize table 也有人把聚集索引稱為聚簇索引。當然了,聚集索...