mysql 中的索引,谈谈 Mysql 中的索引(一)

关于本话题的集合目录:

索引的类型?

索引,都是实现在存储引擎层的。主要有六种类型:

普通索引:最基本的索引,没有任何约束。

唯一索引:与普通索引类似,但具有唯一性约束。

主键索引:特殊的唯一索引,不允许有空值。

复合索引:将多个列组合在一起创建索引,可以覆盖多个列。

外键索引:只有InnoDB类型的表才可以使用外键索引,保证数据的一致性、完整性和实现级联操作。

全文索引:MySQL 自带的全文索引只能用于InnoDB、MyISAM ,并且只能对英文进行全文检索,一般使用全文索引引擎。

常用的全文索引引擎的解决方案有 Elasticsearch、Solr 等。最为常用的是Elasticsearch。

单列索引

单列索引:单列索引是最基本的索引,它没有任何限制。

创建一个单列索引,例如:

create index index_name on tbl_name(index_col_name);

同时,也可以通过修改表结构的方式添加索引,例如:

alter table tbl_name add index index_name on (index_col_name);

复合索引

复合索引:复合索引是在多个字段上创建的索引。复合索引遵守“最左前缀”原则,即在查询条件中使用了复合索引的第一个字段,索引才会被使用。因此,在复合索引中索引列的顺序至关重要。

创建一个复合索引,例如:

create index index_name on tbl_name(index_col_name,...);

同时,也可以通过修改表结构的方式添加索引,例如:

alter table tbl_name add index index_name on (index_col_name,...);

唯一索引

唯一索引:唯一索引和单列索引类似,主要的区别在于,唯一索引限制列的值必须唯一,但允许有空值。对于多个字段,唯一索引规定列值的组合必须唯一。

创建一个复合索引,例如:

create unique index index_name on tbl_name(index_col_name,...);

主键索引

主键索引:主键索引是一种特殊的唯一索引,不允许有空值。此外, CREATE INDEX 不能创建主键索引,需要使用ALTER TABLE代替,例如:

alter table tbl_name add primary key(index_col_name);

全文索引

在一般情况下,模糊查询都是通过 like的方式进行查询。但是,对于海量数据,这并不是一个好办法,在 like “value%” 可以使用索引,但是对于 like “%value%”这样的方式,执行全表查询,这在数据量小的表,不存在性能问题,但是对于海量数据,全表扫描是非常可怕的事情,所以 like进行模糊匹配性能很差。

这种情况下,需要考虑使用全文搜索的方式进行优化。全文搜索在 MySQL 中是一个 FULLTEXT类型索引。 FULLTEXT 索引在MySQL 5.6 版本之后支持 InnoDB,而之前的版本只支持MyISAM表。

假设,有一张应用全文索引表。

CREATE TABLE IF NOT EXISTS `app_full_text` (

`app_id` bigint(20) NOT NULL,

`app_name_full_text` text NOT NULL,

`introduce_full_text` text NOT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

现在需要对应用的名称创建全文索引,可以这么设计。

alter table `app_full_text` add fulltext key `app_name_intro` (`app_name_full_text`);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值