所有MySQL列类型可以被索引。对相关列使用索引是提高SELECT操作性能的最佳途径。
根据存储引擎定义每个表的最大索引数和最大索引长度。参见第15章:存储引擎和表类型。所有存储引擎支持每个表至少16个索引,总索引长度至少为256字节。大多数存储引擎有更高的限制。
在索引定义中用col_name(length)语法,你可以创建一个只使用CHAR或VARCHAR列的第1个length字符的索引。按这种方式只索引列值的前缀可以使索引文件小得多。
MyISAM和InnoDB存储引擎还支持对BLOB和TEXT列的索引。当索引一个BLOB或TEXT列时,你必须为索引指定前缀长度。例如:
CREATE TABLE test (blob_col BLOB, INDEX(blob_col(10)));
在MySQL 5.1中,对于MyISAM和InnoDB表,前缀可以达到1000字节长。请注意前缀的限制应以字节为单位进行测量,而CREATE TABLE语句中的前缀长度解释为字符数。当为使用多字节字符集的列指定前缀长度时一定要加以考虑。
还可以创建FULLTEXT索引。该索引可以用于全文搜索。只有MyISAM存储引擎支持FULLTEXT索引,并且只为CHAR、VARCHAR和TEXT列。索引总是对整个列进行,不支持局部(前缀)索引。详情参见12.7节,“全文搜索功能”。
也可以为空间列类型创建索引。只有MyISAM存储引擎支持空间类型。空间索引使用R-树。
默认情况MEMORY(HEAP)存储引擎使用hash索引,但也支持B-树索引。