索引由数据库表中一个或者多列组合而成,其作用是提高对表中数据的查询速度。
通过索引,查询数据时可以不必读完记录的所有信息,而只是查询索引列。否则,数据库系统将读取每条记录的所有信息进行匹配。使用索引可以很大程度上提高数据库的查询速度。
不同的存储引擎定义了每个表的最大索引数和最大索引长度。所有存储引擎对每个表至少支持16个索引,总索引长度至少为256字节。索引有两种存储类型,包括B型树(BTREE)索引和哈希(HASH)索引。InnoDB和MyISAM存储引擎支持BTREE索引,MEMORY存储引擎支持HASH索引和BTREE索引默认是前者。
索引的优点是可以提高检索数据的速度,这是建立索引的最主要的原因;对于有依赖关系的子表和父表之间的联合查询时,可以提高差选速度;使用分组和排序字句进行数据查询时,同样可以显著节省查询中分组和排序的时候。
索引的缺点是创建和维护索引需要消耗时间,消耗时间的数量随着数据量的增加而增加;索引需要占用物理空间,每个索引所要占一定的物理空间;增加、删除和修改数据时,要动态的维护索引,造成数据的维护速度降低了。
索引可以提高查询速度,但是会影响插入记录的速度。因此,向有索引的表中插入记录时,数据库系统会按照索引进行排序。这样就降低了插入数据的速度,插入大量记录是的速度影响会更加明显。这种情况下,最好的办法是先删除表中的索引,然后插入数据。插入完成后,再建立索引。