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 也有人把聚集索引稱為聚簇索引。當然了,聚集索...