所有MySQL列类型可以被索引。对相关列使用索引是提高SELECT操作性能的最佳途径。

根据存储引擎定义每个表的最大索引数和最大索引长度。参见第15章:存储引擎和表类型。所有存储引擎支持每个表至少16个索引,总索引长度至少为256字节。大多数存储引擎有更高的限制。

在索引定义中用col_name(length)语法,你可以创建一个只使用CHARVARCHAR列的第1length字符的索引。按这种方式只索引列值的前缀可以使索引文件小得多。

MyISAMInnoDB存储引擎还支持对BLOBTEXT列的索引。当索引一个BLOBTEXT列时,你必须为索引指定前缀长度。例如:

CREATE TABLE test (blob_col BLOB, INDEX(blob_col(10)));

MySQL 5.1中,对于MyISAMInnoDB表,前缀可以达到1000字节长。请注意前缀的限制应以字节为单位进行测量,而CREATE TABLE语句中的前缀长度解释为字符数。当为使用多字节字符集的列指定前缀长度时一定要加以考虑

还可以创建FULLTEXT索引。该索引可以用于全文搜索。只有MyISAM存储引擎支持FULLTEXT索引,并且只为CHARVARCHARTEXT列。索引总是对整个列进行,不支持局部(前缀)索引。详情参见12.7节,“全文搜索功能”

也可以为空间列类型创建索引。只有MyISAM存储引擎支持空间类型。空间索引使用R-树。

默认情况MEMORY(HEAP)存储引擎使用hash索引,但也支持B-树索引。