1. create index佈局
格式:create「unique | fulltext | spatial」index「idx_name」on「tbl_name」(indexed_col_name, ...) [index_option]spa
功能:建立新的索引索引
選項和參數:字符串
indexed_col_name:col_name [(length)]io
index_option:innodb
key_block_size [=] valuetable
index_typetest
index_type:數據類型
using {BTREE | HASH}語法
示例:
create index idx_test1 on employee (sex, name);
create unique index idx_test2 on employee (id, name) using BTREE;
說明:
① create index被映射爲alter table語句,用以建立索引。請注意,create index不能建立主鍵,建立主鍵需使用alter table;
② 一般應該在建立表的同時,即create table語句中,建立所需的所有索引。對於InnoDB表尤其如此,由於InnoDB表的主鍵決定了數據文件中行的物理佈局。create index語句的做用是幫助你向已經存在的表中添加索引;
③ (col1, col2, ...)形式的列列表用於建立一個多列索引(組合索引),此時索引鍵的鍵值由全部列值組合而成;
④ 全部存儲引擎都容許惟一索引在可爲NULL的列上同時包含多個NULL值;
⑤ 支持空間數據類型(POINT和GEOMETRY)的存儲引擎有:InnoDB, MyISAM, NDB和ARCHIVE;
1.1 建立前綴索引
對於字符串類型的列,可使用值的前綴來建立索引
語法:create index「idx_name」on「tbl_name」(col_name(length));
參數:col_name(length)用於指定索引前綴長度
優點:使用前綴索引可使索引文件更小,這樣能夠節省大量磁盤空間,甚至還能夠加速insert操做
說明:
① 能夠爲char, varchar, binary和varbinary類型的列建立前綴索引;
② blob和text類型的列必須使用前綴索引;
③ 前綴限制以字節爲單位。在create table, alter table, create index語句中,爲非二進制字符串類型(char, varchar, text)指定的前綴長度被解釋爲字符長度;爲二進制字符串類型(binary, varbinary, blob)指定的前綴長度則被解釋爲字節長度。在爲多字節字符集的非二進制字符串類型的列指定前綴長度時,應考慮到這一點;
④ 是否支持前綴索引以及前綴索引的長度限制,與存儲引擎有關。例如,正常狀況下InnoDB表的前綴限制爲767字節,若是開啓innodb_large_prefix選項則能夠長達3072字節;對於MyISAM表,前綴限制爲1000字節;
示例:
create index idx_name on customer (name(10));
該語句使用name列的前10個字符建立索引(假定name是非二進制字符串類型)
1.2 索引的特性
◇ 全文索引:
① 只有MyISAM存儲引擎支持全文索引;
② 索引列必須爲char, varchar或者text類型;
③ 必須索引整個列,不能使用列前綴(前綴長度自動被忽略);
◇ 空間索引:
① 只有MyISAM存儲引擎支持空間索引。爲其它存儲引擎指定空間索引將致使錯誤;
② 索引列不能爲NULL;
③ 必須索引整個列,不能使用列前綴;
◇ 普通索引(非空間索引):
① 除ARCHIVE外,全部支持空間數據類型的存儲引擎,都支持非空間索引;
② 除主鍵外,索引中的列能夠爲NULL;
③ 除POINT外,非空間索引中的空間列必須使用列前綴,必須指定列前綴長度,單位字節;
④ 非空間索引的索引類型取決於存儲引擎,目前使用B-Tree;
⑤ 只有InnoDB, MyISAM和MEMORY存儲引擎支持在可爲NULL的列上添加索引;
⑥ 只有InnoDB和MyISAM存儲引擎支持在blob和text類型的列上添加索引;
1.3 索引選項
在索引列列表以後,能夠給出索引選項。index_option值能夠爲:
◇ key_block_size [=] value
對於MyISAM表,key_block_size用於指定索引鍵的塊大小,以字節爲單位。該值僅爲提示,若有必要,一個不一樣的大小將被使用。爲單個索引定義指定的key_block_size值將覆蓋表級別的key_block_size值
InnoDB存儲引擎不支持索引級別的key_block_size
◇ index_type
某些存儲引擎容許你在建立索引時指定索引類型,例如:
create index id_test on lookup (id) using BTREE;
下圖顯示了不一樣存儲引擎容許支持的索引類型。在有多個索引類型的狀況下,當沒有顯式給出索引類型說明符時,默認使用第一個。表中未列出的存儲引擎不支持在索引定義中使用index_type子句
index_type子句不能用於全文索引和空間索引。全文索引的實現依賴於具體的存儲引擎。空間索引固定被實現爲R-Tree
若是你指定的索引類型對存儲引擎無效,而另外一索引類型對該存儲引擎有效,且不影響查詢結果,那麼存儲引擎將使用有效的索引類型