MySQL索引分类和各自用途 - Go语言中文社区

MySQL索引分类和各自用途


一、 MySQL: 索引以B树格式保存

Memory存储引擎可以选择Hash或BTree索引,Hash索引只能用于=或<=>的等式比较。

1、普通索引:create index on Tablename(列的列表)

alter table TableName add index (列的列表)

create table TableName([...], index [IndexName] (列的列表)

2、***性索引:create unique index

alter ... add unique

主键:一种***性索引,必须指定为primary key

3、全文索引:从3.23.23版开始支持全文索引和全文检索,FULLTEXT,

可以在char、varchar或text类型的列上创建。

4、单列索引、多列索引:

多个单列索引与单个多列索引的查询效果不同,因为:

执行查询时,MySQL只能使用一个索引,会从多个索引中选择一个限制最为严格的索引。

5、最左前缀(Leftmost Prefixing):多列索引,例如:fname_lname_age索引,以下的搜索条件MySQL都将使用

fname_lname_age索引:firstname,lastname,age;firstname,lastname;firstname,其他情况将不使用。

二、根据sql查询语句确定创建哪种类型的索引,如何优化查询

选择索引列:

a.性能优化过程中,选择在哪个列上创建索引是最重要的步骤之一。可以考虑使用索引的主要有

两种类型的列:在where子句中出现的列,在join子句中出现的列。

b.考虑列中值的分布,索引的列的基数越大,索引的效果越好。

c.使用短索引,如果对字符串列进行索引,应该指定一个前缀长度,可节省大量索引空间,提升查询速度。

d.利用最左前缀

e.不要过度索引,只保持所需的索引。每个额外的索引都要占用额外的磁盘空间,并降低写操作的性能。

在修改表的内容时,索引必须进行更新,有时可能需要重构,因此,索引越多,所花的时间越长。

MySQL只对一下操作符才使用索引:<,<=,=,>,>=,between,in,

以及某些时候的like(不以通配符%或_开头的情形)。

版权声明:本文来源51CTO,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:http://database.51cto.com/art/200905/122789.htm
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2021-06-20 11:34:16
  • 阅读 ( 525 )
  • 分类:数据库

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢