300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > MySQL-数据库的索引类型有哪些

MySQL-数据库的索引类型有哪些

时间:2020-02-11 15:04:54

相关推荐

MySQL-数据库的索引类型有哪些

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请轻击

使用索引可以大大提高MySQL的检索速度,但是也会降低更新表的速度,索引虽好可不要贪多哦。

有哪些索引可供选择呢?

1、普通索引

最基本的索引,它没有任何限制,用于加速查询。

创建方法:

a.建表的时候一起创建

CREATE TABLE mytable (name VARCHAR(32), INDEX index_mytable_name (name));

b.建表后,直接创建索引

CREATE INDEX index_mytable_name ON mytable (name);

c.修改表结构

ALTER TABLE mytable ADD INDEX index_mytable_name (name);

注:如果是字符串字段,还可以指定索引的长度,在列命令后面加上索引长度就可以了(例如:name(11))。

2、唯一索引

索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。

创建方法:

a.建表的时候一起创建

CREATE TABLE mytable (`name` VARCHAR(32), UNIQUE index_unique_mytable_name (`name`));

b.建表后,直接创建索引

CREATE UNIQUE INDEX index_mytable_name ON mytable (name);

c.修改表结构

ALTER TABLE mytable ADD UNIQUE INDEX index_mytable_name (name);

注:如果是字符串字段,还可以指定索引的长度,在列命令后面加上索引长度就可以了(例如:name(11))。

3、主键索引

是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值。一般是在建表的时候同时创建主键索引。

创建方法:

a.建表的时候一起创建

CREATE TABLE mytable (`id` int(11) NOT NULL AUTO_INCREMENT, `name` VARCHAR(32), PRIMARY KEY (`id`));

b.修改表结构

ALTER TABLE test.t1 ADD CONSTRAINT t1_pk PRIMARY KEY (id);

注:如果是字符串字段,还可以指定索引的长度,在列命令后面加上索引长度就可以了(例如:name(11))。

4、组合索引

指多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用。使用组合索引时遵循最左前缀集合。

创建方法:

a.建表的时候一起创建

CREATE TABLE mytable (`id` int(11), `name` VARCHAR(32), INDEX index_mytable_id_name (`id`,`name`));

b.建表后,直接创建索引

CREATE INDEX index_mytable_id_name ON mytable (id,name);

c.修改表结构

ALTER TABLE mytable ADD INDEX index_mytable_id_name (id,name);

5、全文索引

主要用来查找文本中的关键字,而不是直接与索引中的值相比较。

fulltext索引跟其它索引大不相同,它更像是一个搜索引擎,而不是简单的where语句的参数匹配。fulltext索引配合match against操作使用,而不是一般的where语句加like。实际使用较少。

【拓展】

哪些情况需要创建索引?

1、主键自动建立唯一索引。

2、频繁作为查询条件的字段应该创建索引(where后面的语句)。

3、查询中与其它表关联的字段,外键关系建立索引。

4、查询中排序的字段,排序字段若通过索引去访问将大大提高排序速度。

5、查询中统计或者分组字段。

哪些情况不需要创建索引?

1、表记录太少。

2、经常增删改的表:提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。 因为更新表时,MySQL不仅要保存数据,还要保存索引文件。

3、where条件里用不到的字段不用创建索引。

4、数据重复且分布平均的表字段,某个数据列包含许多重复的内容,建立索引没有太大实际效果。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。