- 論壇徽章:
- 0
|
今天用到了mysql索引,貼點(diǎn)資料
索引用來快速地尋找那些具有特定值的記錄,所有MySQL索引都以B-樹的形式保存。如果沒有索引,執(zhí)行查詢時(shí)MySQL必須從第一個(gè)記錄開始掃描整個(gè)表的所有記錄,直至找到符合要求的記錄。表里面的記錄數(shù)量越多,這個(gè)操作的代價(jià)就越高。如果作為搜索條件的列上已經(jīng)創(chuàng)建了索引,MySQL無需掃描任何記錄即可迅速得到目標(biāo)記錄所在的位置。如果表有1000個(gè)記錄,通過索引查找記錄至少要比順序掃描記錄快100倍。
MySQL提供多種索引類型供選擇:
普通索引
這是最基本的索引類型,而且它沒有唯一性之類的限制。普通索引可以通過以下幾種方式創(chuàng)建: 創(chuàng)建索引,例如CREATE INDEX ON tablename (列的列表); 修改表,例如ALTER TABLE tablename ADD INDEX [索引的名字] (列的列表); 創(chuàng)建表的時(shí)候指定索引,例如CREATE TABLE tablename ( [...], INDEX [索引的名字] (列的列表) );唯一性索引
這種索引和前面的“普通索引”基本相同,但有一個(gè)區(qū)別:索引列的所有值都只能出現(xiàn)一次,即必須唯一。唯一性索引可以用以下幾種方式創(chuàng)建: 創(chuàng)建索引,例如CREATE UNIQUE INDEX ON tablename (列的列表); 修改表,例如ALTER TABLE tablename ADD UNIQUE [索引的名字] (列的列表); 創(chuàng)建表的時(shí)候指定索引,例如CREATE TABLE tablename ( [...], UNIQUE [索引的名字] (列的列表) );主鍵
主鍵是一種唯一性索引,但它必須指定為“PRIMARY KEY”。如果你曾經(jīng)用過AUTO_INCREMENT類型的列,你可能已經(jīng)熟悉主鍵之類的概念了。主鍵一般在創(chuàng)建表的時(shí)候指定,例如“CREATE TABLE tablename ( [...], PRIMARY KEY (列的列表) ); ”。但是,我們也可以通過修改表的方式加入主鍵,例如“ALTER TABLE tablename ADD PRIMARY KEY (列的列表); ”。每個(gè)表只能有一個(gè)主鍵。 全文索引
MySQL從3.23.23版開始支持全文索引和全文檢索。在MySQL中,全文索引的索引類型為FULLTEXT。全文索引可以在VARCHAR或者TEXT類型的列上創(chuàng)建。它可以通過CREATE TABLE命令創(chuàng)建,也可以通過ALTER TABLE或CREATE INDEX命令創(chuàng)建。對(duì)于大規(guī)模的數(shù)據(jù)集,通過ALTER TABLE(或者CREATE INDEX)命令創(chuàng)建全文索引要比把記錄插入帶有全文索引的空表更快。本文下面的討論不再涉及全文索引,要了解更多信息,請(qǐng)參見
[color="#0000ff"]MySQL documentation
索引的缺點(diǎn)到目前為止,我們討論的都是索引的優(yōu)點(diǎn)。事實(shí)上,索引也是有缺點(diǎn)的。
首先,索引要占用磁盤空間。通常情況下,這個(gè)問題不是很突出。但是,如果你創(chuàng)建每一種可能列組合的索引,索引文件體積的增長速度將遠(yuǎn)遠(yuǎn)超過數(shù)據(jù)文件。如果你有一個(gè)很大的表,索引文件的大小可能達(dá)到操作系統(tǒng)允許的最大文件限制。
第二,對(duì)于需要寫入數(shù)據(jù)的操作,比如DELETE、UPDATE以及INSERT操作,索引會(huì)降低它們的速度。這是因?yàn)镸ySQL不僅要把改動(dòng)數(shù)據(jù)寫入數(shù)據(jù)文件,而且它還要把這些改動(dòng)寫入索引文件。
本文來自ChinaUnix博客,如果查看原文請(qǐng)點(diǎn):http://blog.chinaunix.net/u/1163/showart_51726.html |
|