5.2.1 索引简介

5.2.1 索引简介

所有的MySQL列类型都能被索引。在相关的列上使用索引是改进select操作性能的最好方法。

•一个表最多可有16个索引。最大索引长度是256字节,这可以在编译MySQL时被改变。

•对于char和varchar列,可以索引列的前缀。这更快,并且比索引整个列需要较少的磁盘空间。对于blob和text列,必须索引列的前缀,而不能索引列的全部。

•MySQL能在多个列上创建索引。一个索引可以由最多15个列组成(在char和varchar列上,也可以使用列的前缀作为一个索引部分)。

随着MySQL的进一步开发,创建索引的约束将会越来越少,但现在还是存在一些约束的。表5-1根据索引的特性,给出了ISAM表和MyISAM表之间的差别。

表5-1 通道信息特征字对照表

从此表中可以看到,对于ISAM表来说,其索引列必须定义为not null,并且不能对blob和text列进行索引。MyISAM表类型去掉了这些限制,而且减缓了其他的一些限制。两种表类型的索引特性的差异表明,根据所使用的MySQL版本的不同,有可能对某些列不能进行索引。

1.索引的分类

索引有如下几种分类:

①index索引:通常意义的索引,某些情况下,key是它的一个同义词。索引的列可以包括重复的值。

②unique索引:唯一索引,保证了列不包含重复的值。对于多列唯一索引,它保证值的组合不重复。

③primary key索引:与unique索引非常类似。事实上,primary key索引仅是一个具有primary名称的unique索引。这表示一个表只能包含一个primary key。

④fulltext索引:全文索引。全文索引的索引类型为fulltext。全文索引只能在varchar或text类型的列上创建,并且只能在MyISAM表中创建。

查看数据表中现有索引的语法是:

【例5.4】查看departments表中现有索引情况。

代码如下:

由于列数太多,例5.4并没有包括所有的输出。departments数据表中现有两个索引,分别是dno列上创建的主键约束和dname列上创建的唯一约束。

索引是加快查询的最重要的工具。还有其他加快查询的技术,但是最有效的莫过于恰当地使用索引。但这样也并非总是有效的,因为优化并非总是那样简单。然而,如果不使用索引,在许多情形下,用其他手段改善性能只会是浪费时间。应该首先考虑使用索引取得最大的性能改善,然后再寻求其他可能有帮助的技术。

2.索引的作用

所有的MySQL索引(primary key、unique和index)在B树中存储。字符串自动地压缩前缀和结尾空间。索引用于以下几种情况:

①快速找出匹配一个where子句的行。

②进行多个表的查询时,执行连接时,加快了与其他表中的行匹配的行的搜索。

③对特定的索引列找出max()或min()值。

④如果排序或分组在一个可用索引的最左前缀上进行,则排序或分组一个表,如果所有键值部分跟随desc,键以倒序被读取。

⑤在一些情况中,一个查询能被优化,用来检索值,不用访问数据文件。如果某些表的所有使用的列是数字型的,并且构成某些键的最左前缀,为了更快,值可以从索引树被检索出来。