【正文】
。如果對之建立BTree索引,則只需要進行l(wèi)og100(10^6)=3次頁面讀取,最壞情況下耗時30ms。這就是索引帶來的效果,很多 時候,當你的應(yīng)用程序進行SQL查詢速度很慢時,應(yīng)該想想是否可以建索引。索引是快速搜索的關(guān)鍵。MySQL索引的建立對于MySQL的高效運行是很重要的。 索引的簡單使用假如我們創(chuàng)建了一個 mytable表:CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL )。 我們隨機向里面插入了10000條記錄,其中有一條:5555, admin。在查找username=admin的記錄 SELECT * FROM mytable WHERE username=39。admin39。時,如果在username上已經(jīng)建立了索引,MySQL無須任何掃描,即準確可找到該記錄。相反,MySQL會掃描 所有記錄,即要查詢10000條記錄。索引分單列索引和組合索引。單列索引,即一個索引只包含單個列,一個表可以有多個單列索引,但這不是組合索引。組合索引,即一個索包含多個列。MySQL索引類型包括:這是最基本的索引,它沒有任何限制。它有以下幾種創(chuàng)建方式:◆創(chuàng)建索引CREATE INDEX indexName ON mytable(username(length))。 如果是CHAR,VARCHAR類型,length可以小于字段實際長度;如果是BLOB和TEXT類型,必須指定 length,下同?!粜薷谋斫Y(jié)構(gòu)ALTER mytable ADD INDEX [indexName] ON (username(length)) ◆創(chuàng)建表的時候直接指定CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, INDEX [indexName] (username(length)) )。 ◆刪除索引的語法:DROP INDEX [indexName] ON mytable。它與前面的普通索引類似,不同的就是:索引列的值必須唯一,但允許有空值。如果是組合索引,則列值的組合必須唯一。它有以下幾種創(chuàng)建方式:◆創(chuàng)建索引CREATE UNIQUE INDEX indexName ON mytable(username(length)) ◆修改表結(jié)構(gòu)ALTER mytable ADD UNIQUE [indexName] ON (username(length)) ◆創(chuàng)建表的時候直接指定CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, UNIQUE [indexName] (username(length)) )。它是一種特殊的唯一索引,不允許有空值。一般是在建表的時候同時創(chuàng)建主鍵索引:CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, PRIMARY KEY(ID) )。 當然也可以用 ALTER 命令。記?。阂粋€表只能有一個主鍵。為了形象地對比單列索引和組合索引,為表添加多個字段:CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, city VARCHAR(50) NOT NULL, age INT NOT NULL )。 為了進一步榨取MySQL的效率,就要考慮建立組合索引。就是將 name, city, age建到一個索引里:ALTER TABLE mytable ADD INDEX name_city_age (name(10),city,age)。 建表時,usernname長度為 16,這里用 10。這是因為一般情況下名字的長度不會超過10, 這樣會加速索引查詢速