MySQL進階語法

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

若是你指定的索引類型對存儲引擎無效,而另外一索引類型對該存儲引擎有效,且不影響查詢結果,那麼存儲引擎將使用有效的索引類型

相關文章
相關標籤/搜索