美文网首页
MySQL索引

MySQL索引

作者: younger_times | 来源:发表于2017-09-07 11:41 被阅读18次

[toc]
索引是一种特殊的数据库结构,可以用来快速查询数据表中的特定记录,也是提高数据库性能的重要方式。

含义与特点

索引是创建在表上的,是对数据库表中一列或多列的值进行排序的一种结构,索引可以提高查询速度。

  • 优点

提高检索数据的速度,对于依赖关系的子表和父表之间的联合查询,分组,排序子句时,提高速度。

  • 缺点

创建和维护需要耗费额外的时间,索引需要额外的物理空间,每一个索引要占一定的物理空间。表的更改,同样索引也要同样进行更改
虽然查询速度提高,但插入记录的速度会被影响,向有索引的表中插入记录时,会安宅索引进行排序,大量数据的插入尤其明显,解决此办法是删除索引,再进行插入数据,再创建索引。

索引分类

普通索引

不附加任何限制条件,这类索引可以创建在任何数据类型中,其值是否唯一和非空由字段本身的完整性约束条件决定。查询时可以通过索引进行查询。

唯一性索引

使用unique参数可以设置索引为唯一性索引。在创建唯一性索引时,限制该索引的值必须是唯一性的。

全文索引

使用fulltext参数可以设置索引为全文索引。全文索引只能创建在char,varchar,text类型的字段上。查询数据较大的字符串类型的字段时,使用全文索引可以提高查询速度。

单例索引

在表中的单个字段上创建索引。单列索引只根据字段进行索引。单列索引可以是上面任意一个索引,只要保证该索引只对应一个字段。

多列索引

多列索引是在表的多个字段上创建一个索引。该索引指向创建时对应的多个字段,可以通过该几个字段进查询,只有查询条件中使用了这些字段中第一个字段时,索引才会被使用。

空间索引

使用spatial参数可以设置索引为空间索引。空间索引只能创建在空间数据类型上,这样可以提高系统获取空间索引的效率。目前只有MyISAM存储引擎支持空间检索。类型包括geometry point ,lienstring,polygon等。

索引的设计原则

  1. 选择唯一性索引

唯一性索引的值是唯一的。可以更快速的通过该索引来确定某条记录。

  1. 为经常需要排序,分组和联合操作的字段建立索引

经常需要order by, group by,distinct,union等操作的字段。

  1. 为常作为查询条件的字段建立索引

如果某个字段经常用来做查询条件,那么该字段的查询速度会影响整个表的查询速度。

  1. 限制索引的数目

索引不是越多越好,索引要占用磁盘空间。越多的索引,后期维护和更改也是麻烦事。

  1. 尽量使用数据量少的索引

如果索引的值很长,那么查询的速度会受到影响。

  1. 索引使用前缀来索引

如果索引字段的值很长,最好使用值的前缀来索引。blog,text字段,全文检索很浪费时间,只检索字段前面若干个字符,这样提高检索速度。

  1. 删除不再使用或者很少使用的索引

道理很简单,占着茅坑不拉屎。

创建索引

 craete table 表名 (属性名 数据类型 [完整性约束条件] [unique|fulltext|spatial] index|key [别名](属性名1, [(长度)][ASC|DESC]))

创建普通索引

 create table table1 (id int,
     name varchar(20),
     index(id)
    );

explain语句可以查询索引是否被使用
explain select * from table1

创建唯一性索引

需要使用unique参数进行约束

create table table2
    (id int unique,
    name varchar(20),
    unique index index_2(id asc)
);

创建全文索引

只能创建在char,varchar,text类型上。只有MyISAM存储引擎支持全文索引

create table table3(
    id int ,
    info varchar(20),
    fulltext index index_3(info)    
    )engine=MyISAM;

创建单列索引

单列索引是在表的单个字段上创建索引

create table table4(
    id  int ,
    subject varchar(20),
    index index_4(subject(10))
);

创建多列索引

create table table5(
    id int ,
    name varchar(20),
    sex char(4),
    index index_5(name,sex)
);

创建空间索引

创建空间索引必须使用spatial 参数来设置,创建空间索引是,表的存储引擎必须是MyISAM类型,而且索引字段必须有非空约束

create table table6(
    id int ,
    space geometry not null,
    spatial index index_6(space)
)engine=MyISAM;

为已存在的表上创建索引

create [unique|fulltext|spatial] index 索引名 on 表名 (属性名 [(长度)] [asc|desc]);

  • unique 表示唯一性索引
  • fulltext 表示全文索引
  • spatial 表示空间索引

用alter table 语句来创建索引

alter table 表名 add [unique|fulltext|spatial] index 索引名 on 表名 (属性名 [(长度)] [asc|desc]);

删除索引

drop index 索引名 on 表名

相关文章

  • MySQL索引及查询优化书目录

    MySQL索引的原理之索引目的 MySQL索引的原理之索引原理 MySQL索引的原理之索引的类型 MySQL索引的...

  • 高性能的索引策略

    MySQL查询基础-查询执行过程 MySQL聚簇索引 MySQL覆盖索引 MySQL索引扫描排序 MySQL冗余和...

  • MySQL索引的使用

    MySQL索引 MySQL索引可以快速提高MySQL的检索速度。索引分单列索引和组合索引单列索引:即一个索引只包含...

  • Mysql索引与锁

    本文以Mysql5.7为例测试。 1:mysql索引方法 Mysql的索引方法分为btree索引和hash索引。 ...

  • 索引(二)

    mysql索引的新手入门详解mysql索引之三:索引使用注意规则 索引(Index)是帮助 MySQL 高效获取数...

  • MySQL 索引分类

    MySQL索引的分类(根据数据结构) 索引的本质 MySQL官方对索引的定义为:索引(Index)是帮助MySQL...

  • MySQL--索引

    MySQL索引 查看索引 创建索引 创建唯一索引 创建主键索引 删除索引 删除主键 MySQL视图 创建视图 删除...

  • mysql索引

    索引 mysql索引的建立对于mysql的高效运行是很重要的,索引可以大大提高mysql的检索速度。索引分单列索引...

  • 5.2MySQL创建高性能索引考察点

    MySQL索引的基础和类型延伸:MySQL索引的创建原则延伸:MySQL索引的注意事项 索引的基础索引类似于书籍的...

  • MySql 数据查询优化

    1. MySQL索引类型: mysql的索引有5种:主键索引、普通索引、唯一索引、全文索引、聚合索引(多列索引)。...

网友评论

      本文标题:MySQL索引

      本文链接:https://www.haomeiwen.com/subject/ebfijxtx.html