索引的含义和特点
索引是一个单独的,存储在磁盘上的数据库结构,它们包含着对数据表里所有记录的引用指针。使用所以用于快速找出在某个或多个列种有一特定值的行,所有的MySQL列类型都可以被索引,对相关列使用索引是提高查询操作速度的最佳途径。
优点
索引的优点主要有以下几条:
- 通过创建唯一索引,可以保证数据库表中的每一行数据的唯一性。
- 可以大大加快数据的查询速度,这也是创建索引的最主要的原因。
- 在实现数据的参考完整性方面,可以加速表和表之间的连接。
- 在使用分组和排序子句进行数据查询时,可以显著减少查询中分组和排序的时间。
缺点
增加索引也有许多不利,主要表现在如下几个方面:
- 创建索引和维护索引要耗费时间,并且随着数据量的增加所耗费的时间也会增加。
- 索引需要占用磁盘空间,除了数据表占数据空间之外,每一个索引还要占据一定的物理空间,如果有大量的索引,索引文件可能比数据文件更快达到最大文件尺寸。
- 当对表中的数据进行增加、删除和修改的时候,索引也要动态地维护,这样就降低了数据的维护速度。
MySQL表最大能达到多少?
MySQL 3.22 限制的表大小为4GB。由于在MySQL 3.23 中使用了MyISAM 存储引擎,最大表尺寸增加到了65536TB(2567 – 1字节)。由于允许的表尺寸更大,MySQL数据库的最大有效表尺寸通常是由操作系统对文件大小的限制决定的,而不是由MySQL内部限制决定的。
InnoDB 存储引擎将InnoDB 表保存在一个表空间内,该表空间可由数个文件创建。这样,表的大小就能超过单独文件的最大容量。表空间可包括原始磁盘分区,从而使得很大的表成为可能。表空间的最大容量为64TB。
上述就是对最大文件尺寸的描述。
毕竟索引是包含对数据表记录的引用指针。
索引的分类
普通索引和唯一索引
普通索引是MySQL中的基本索引类型,允许在定义索引的列中插入重复值和控制。
唯一索引,索引值必须唯一,但允许空值。如果是组合索引,则列值的组合必须唯一。主键索引是一种特殊的唯一索引,不允许用空值。
创表语句
- 普通索引
create table book
(
bookid int not null,
bookname varchar(255) not null,
authors varchar(255) not null,
info varchar(255) null,
comment varchar(255) null,
year_publication year not null,
index(year_publication)
);
- 唯一索引
把index那一行改成:unique index UniqIdx(year_publication)
单列索引和组合索引
单列索引即一个索引只包含单个列,一个表可以有多个单列索引。
组合索引指在表的多个字段组合上创建的索引,只有在查询条件中使用了这些字段的左边字段时,索引才会被使用。使用组合索引时遵循最左前缀集合。
创表语句
- 单列索引
INDEX SingleIdx(name(20))
- 组合索引
INDEX MultiIdx(id,name,age(100))
全文索引
全文索引类型为FULLTEXT,在定义索引的列上支持值的全文查找,允许在这些索引列中插入重复值和空值。全文索引可以在CHAR,VARCHAR或者TEXT类型的列上创建。MySQL中只有MyISAM存储引擎支持全文索引。
创表语句
文本索引
FULLTEXT INDEX FullTxtIdx(info)
空间索引
空间索引是对空间数据类型的字段建立的索引,MySQL中的空间数据类型有4种,分别是:GEOMETRY , POINT , LINESTRING , POLYGON。MySQL使用SPATIAL关键字进行扩展,使得能够用于创建正规索引类型的语法创建空间索引。创建空间索引的列,必须声明NOT NULL。
创表语句
空间索引必须在MyISAM类型的表中创建,且空间类型的字段必须为非空。
空间索引
create table t5(
g geometry NOT NULL,
spatial INDEX spatIdx(g))engine = MyISAM;