mysql5.7之后,InnoDB支持全文索引和空间函数
索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。
索引分为聚簇索引和非聚簇索引。聚簇索引是按照数据存放的物理位置为顺序的,而非聚簇索引就不一样了。聚簇索引能提高多行检索的速度,而非聚簇索引对于当行的检索很快。
MYSQL中常见的两种存储引擎分别是MyISAM和InnoDB,分别实现了非聚簇索引和聚簇索引。
在索引的分类中,我们可以按照索引的键是否为主键来分为“主索引”和”辅助索引”,使用主键值建立的索引称为“主索引”,其他的称为“辅助索引”。因此主索引只能有一个,辅助索引可以有多个。
数据库表的索引从数据存储方式上可以分为聚簇索引和非聚簇索引(二级索引)。
MyISAM存储引擎采用的是非聚簇索引,非聚簇索引的主索引和辅助索引几乎是一样的,只是主索引不允许重复,不允许空值,它们的叶子节点的key都存储指向键值对应的数据的物理地址【指针】。
非聚簇索引的数据表和索引表是分来存储的。
非聚簇索引中的数据是根据数据的插入顺序保存。因此非聚簇索引更适合单个数据的查询。插入顺序不受键值影响。
只有在MyISAM中才能使用FULLTEXT索引.(mysql5.6以后i nnoDB也支持全文索引)
聚簇索引的主索引的叶子节点存储的是键值对应的数据本身,辅助索引的叶子节点存储的是键值对应的数据的主键键值。因此主键的值长度越小越好,类型越简单越好。
聚簇索引的数据和主键索引存储在一起。
聚簇索引的数据是根据主键的保存顺序保存。因此适合按主键索引的区间查找,可以有更少的磁盘I/O,加快查询速度。但是也是因为这个原因,聚簇索引的插入顺序最好按照主键单调的顺序插入,否则会频繁的引起页分裂,严重影响性能。
在InnoDB中,如果只需要查找索引的列,就尽量不要加入其他的列,这样会提高查询效率。【如果查询的列不是索引列,是需要进行回表查询】