4 MySQL学习---MySQL索引( 五 )


空间索引(SPATIAL)空间索引是对空间数据类型的字段建立的索引,MySQL中的空间数据类型有4种,分别是geometry、point、linestring和polygon 。MySQL使用SPATIAL关键字进行扩展,使得能够用于创建正规索引类似的语法创建空间索引 。创建空间索引的列必须声明为NOT NULL 。
按索引列的数量分类,有以下几种索引类型:
单列索引单列索引即一个索引只包含单个列,一个表中可以有多个单列索引 。语法如下:
# 随表一起建立单列索引 。索引名同列名(name)create table user (uid int(10) unsigned auto_increment,name varchar(50) not null,gender int(2) not null,primary key(uid),key(name));# 单独建立单列索引create index idx_name on user(name);# 删除单列索引drop index idx_name;联合索引/复合索引联合索引即一个索引中包含多个列,在数据库操作期间,联合索引所需要的开销更小(相对于相同的多个列建立单值索引) 。语法如下:
# 随表一起建立联合索引create table user (uid int(10) unsigned auto_increment,name varchar(50) not null,gender int(2) not null,primary key(uid),key(name),unique(gender),key(name,gender));# 单独建立联合索引create index idx_name_gender on user(name,gender);# 删除联合索引drop index idx_name_gender on user;按存储结构分类,有以下几种索引类型:
聚簇索引/聚集索引(Primary Key)InnoDB引擎中的聚簇索引通常由主键或非空唯一索引来实现的,实际上是在叶子节点中同时存储了索引和整行数据,通过该索引查询可以直接获取查询数据行 。
与MYISAM引擎不同,InnoDB的数据文件本身就是索引文件,表数据文件本身就是按照B+组织的一个索引结构,其叶子节点的键值就是表的主键,这种数据存储方式也被称为聚簇索引 。由此可见,聚簇索引并不是一种单独的索引类型,而是一种数据存储方式 。
聚簇索引的叶子节点都包含主键值、事务ID、用于事务MVCC的回滚指针以及所有的剩余列 。
注:InnoDB存储引擎的表会存在主键(唯一且非空),如果建表的时候没有指定主键,则会使用第一个非空的唯一索引作为聚集索引,否则InnoDB会自动帮你创建一个不可见的、长度为6字节的row_id用来作为聚集索引 。
非聚簇索引/辅助索引/二级索引非聚簇索引也叫辅助索引、二级索引等,叶子节点存储索引值和主键值 。当需要访问数据时,根据主键从聚簇索引中查询 。
与MYISAM引擎的辅助索引实现不同,InnoDB的辅助索引,其叶子节点存储的不是行指针而是主键值,得到主键值再要查询具体行数的话,要去聚簇索引中再查找一次,也叫回表 。这样的策略优势是减少了当出现行移动或者数据页分裂时二级索引的维护工作 。
索引的创建原则