mysql中的索引

索引

a. 概念

索引是基于数据库表创建的,它包含一个表中某些列的值以及记录对应的数值(具体是什么数值,要看引擎和索引的种类).

b. 作用

在存储数据时会把数据组织成某种数据结构(通常是B+树,也可是hash结构,这种结构不支持范围查找,所以很少用),查询时可以利用该数据结构的特性提高查询速度。-----但无法提高增删改的效率,会使增删改变慢,因为索引建立之后需要对索引的b+树进行维护,每次增删改都会改变b+树的结构,从而减慢增删改的效率。

c.索引的种类

  • 哈希索引:采用哈希算法,存储引擎为memery才使用,把索引列数据换算成哈希值,检索时不需要类似B+树那样从根节点到叶子节点逐级查找,只需一次哈希算法即可立刻定位到相应的位置,速度非常快,但不适合范围查找和排序。--这个用的比较少

  • 聚集索引(innodb)---聚集索引---索引和数据存储在一个ibd文件中:聚集索引通常就是主键索引,如果没有定义主键索引,但有唯一索引且非空的一个字段或字段集(多字段唯一),则使用该唯一索引作为聚集索引,如果没有这样的唯一索引,则会自动产生一个隐藏的索引为gen_clust_index,一个表只能有一个聚集索引,而非聚集索引可以有很多个

    • 主键索引:由主键约束所产生的索引.

    • 唯一索引:由唯一约束所产生的索引。unique--唯一索引可能是聚集索引,也可能是非聚集索引 

  • 非聚集索引---索引和数据分开存储,索引文件myi存储了索引和机械地址

    • 单值索引:用create index 索引名字 on 表名(字段)。

    • 复合索引:基于某些列建立索引。create index 索引名 on 表名(字段1,字段2);

    • 全文索引:类似于solr,把一篇篇文章存储在某一列,搜索时使用全文索引。很少用,>=5.6版本的mysql才支持。

posted @ 2021-07-16 15:14  Stargazer丶  阅读(49)  评论(0)    收藏  举报