索引用來快速地尋找那些具有特定值的記錄,所有mysql索引都以b-樹的形式儲存。如果沒有索引,執行查詢時mysql必須從第
乙個記錄開始掃瞄整個表的所有記錄,直至找到符合要求的記錄。表裡面的記錄數量越多,這個操作的代價就越高。如果作為
搜尋條件的列上已經建立了索引,mysql無需掃瞄任何記錄即可迅速得到目標記錄所在的位置。如果表有1000個記錄,通過索引
查詢記錄至少要比順序掃瞄記錄快100倍。
索引的型別:
mysql提供多種索引型別供選擇:
(一)普通索引
這是最基本的索引型別,而且它沒有唯一性之類的限制。普通索引可以通過以下幾種方式建立:
建立索引,例如create index 《索引的名字》 on tablename (列的列表);
修改表,例如alter table tablename add index [索引的名字] (列的列表);
建立表的時候指定索引,例如create table tablename ( [...], index [索引的名字] (列的列表) );
(二)唯一性索引
這種索引和前面的「普通索引」基本相同,但有乙個區別:索引列的所有值都只能出現一次,即必須唯一。唯一性索引可以用
以下幾種方式建立:
建立索引,例如create unique index 《索引的名字》 on tablename (列的列表);
修改表,例如alter table tablename add unique [索引的名字] (列的列表);
建立表的時候指定索引,例如create table tablename ( [...], unique [索引的名字] (列的列表));
(三)主鍵
主鍵是一種唯一性索引,但它必須指定為「primary key」。如果你曾經用過auto_increment型別的列,你可能已經熟悉主鍵之
類的概念了。主鍵一般在建立表的時候指定,例如「create table tablename ( [...], primary key (列的列表) ); 」。但
是,我們也可以通過修改表的方式加入主鍵,例如「alter table tablename add primary key (列的列表); 」。每個表只能
有乙個主鍵。
(四)全文索引
mysql從3.23.23版開始支援全文索引和全文檢索。在mysql中,全文索引的索引型別為fulltext。全文索引可以在varchar或者
text型別的列上建立。它可以通過create table命令建立,也可以通過alter table或create index命令建立。對於大規模的數
據集,通過alter table(或者create index)命令建立全文索引要比把記錄插入帶有全文索引的空表更快。本文下面的討論不
(四)單列索引與多列索引
索引可以是單列索引,也可以是多列索引。下面我們通過具體的例子來說明這兩種索引的區別。假設有這樣乙個people表:
create table people ( peopleid smallint not null auto_increment, firstname char(50)
not null, lastname char(50) not null, age smallint not null, townid smallint not
null, primary key (peopleid) );
什麼是索引 索引有哪幾種 什麼時候用索引比較好
索引用來快速地尋找那些具有特定值的記錄,所有mysql索引都以b 樹的形式儲存。如果沒有索引,執行查詢時mysql必須從第乙個記錄開始掃瞄整個表的所有記錄,直至找到符合要求的記錄。表裡面的記錄數量越多,這個操作的代價就越高。如果作為搜尋條件的列上已經建立了索引,mysql無需掃瞄任何記錄即可迅速得到...
什麼是索引 索引有哪幾種 什麼時候用索引比較好
索引用來快速地尋找那些具有特定值的記錄,所有mysql索引都以b 樹的形式儲存。如果沒有索引,執行查詢時mysql必須從第乙個記錄開始掃瞄整個表的所有記錄,直至找到符合要求的記錄。表裡面的記錄數量越多,這個操作的代價就越高。如果作為搜尋條件的列上已經建立了索引,mysql無需掃瞄任何記錄即可迅速得到...
什麼是索引?索引有哪幾種?什麼時候使用索引比較好?
索引用來快速地尋找那些具有特定值的記錄,所有的mysql索引都以b 樹的形式儲存。如果沒有索引,執行查詢的時候mysql必須從第乙個記錄開始掃瞄整個表中的所有記錄,直至找到符合要求的記錄。表裡面的記錄數量越多,這個操作的代價就越高。如果作為搜尋條件的列上已經建立了索引,mysql無需掃瞄任何記錄既可...