美文网首页IT修真院_JAVA
PRIMARY KEY & UNIQUE(主键、唯一索引)

PRIMARY KEY & UNIQUE(主键、唯一索引)

作者: TechMessage | 来源:发表于2017-10-13 09:40 被阅读0次

    MySQL数据库索引_腾讯视频


    PRIMARY KEY & UNIQUE(主键、唯一索引)

    1.背景介绍

    概念

    索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。

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

    不建立索引的话,MySQL执行查询会从数据表的第一行开始查直到查询想要的数据结果。

    2.知识剖析

    索引的分类--单列来区分

    1).普通索引--这是最基本的索引,它没有任何限制

    2).唯一索引--索引列的值必须唯一,但允许有空值;如果是组合索引,则列值的组合必须唯一

    3).主键索引--列值唯一,非空,一个数据表只能有一个主键

    4).组合索引:将数据表中多个列建到一个索引中,MySQL组合索引遵循“最左前缀”原则,

    就是说你的查询条件语句里必选包含组合索引第列的值才能使用

    改组合索引,例如在某个数据表中为user,name,age三个列建立组合索引,

    查询语句里必须有where user*才会调用这个索引。

    索引的分类(存储结构)(InnoDB)

    B-tree

    mysql数据库中主键、唯一、普通、全文都是采用b-tree数据结构

    在InnoDB中,表数据文件本身就是按B+Tree组织的一个索引结构,

    这棵树的叶节点data域保存了完整的数据记录。这个索引的key是数据表的主键,

    因此InnoDB表数据文件本身就是主索引,InooDB必须要求主键,没有显示声明,系统会默认添加

    除了主键索,其它都是辅助索引,辅助索引也会包含主键列,因此主键列最好不要设置太大的列值

    因为是聚簇索引方式,聚簇索引的顺序就是数据的物理存储顺序,叶节点就是数据节点。主键最好是单调的。

    hash索引

    简单地说,哈希索引就是采用一定的哈希算法,把键值换算成新的哈希值,检索时不需要类似B树那样从根节点到叶子节点逐级查找,只需一次哈希算法即可立刻定位到相应的位置,速度非常快

    1.可以通过建立唯一索引或者主键索引,保证数据库表中每一行数据的唯一性.

    2.建立索引可以大大提高检索的数据,以及减少表的检索行数

    3.在表连接的连接条件 可以加速表与表直接的相连

    4.在分组和排序字句进行数据检索,可以减少查询时间中 分组 和 排序时所消耗的时间(数据库的记录会重新排序)

    5.建立索引,在查询中使用索引 可以提高性能

    3.常见问题

    1.索引可以提高查询效率,数据表每个列都建索引,这样可行吗?

    1).在创建索引和维护索引 会耗费时间,随着数据量的增加而增加

    2).索引文件会占用物理空间,除了数据表需要占用物理空间之外,每一个索引还会占用一定的物理空间

    3).当对表的数据进行INSERT,UPDATE,DELETE的时候,索引也要动态的维护,这样就会降低数据的维护速度,(建立索引会占用磁盘空间的索引文件。一般情况这个问题不太严重,但如果你在一个大表上创建了多种组合索引,索引文件的会膨胀很快)。

    4.解决方案

    1.在经常需要搜索的列上,可以加快索引的速度

    2.主键列上可以确保列的唯一

    3.在经常需要排序(order by),分组(group by)和的distinct列上加索引 可以加快排序查询的时间

    4.在一些where之后的< <= > >= BETWEEN IN以及某个情况下的like建立字段的索引(B-TREE)

    5.选择越小的数据类型越好,因为通常越小的数据类型通常在磁盘,内存,cpu,缓存中 占用的空间很少,处理起来更快

    5.什么情况不要建索引?

    1.查询中很少使用到的列 不应该创建索引,如果建立了索引然而还会降低mysql的性能和增大了空间需求.

    2.很少数据的列也不应该建立索引,比如 一个性别字段0或者1,在查询中,结果集的数据占了表中数据行的比例比较大,mysql需要扫描的行数很多,增加索引,并不能提高效率

    3.当表的修改(UPDATE,INSERT,DELETE)操作远远大于检索(SELECT)操作时不应该创建索引,这两个操作是互斥的关系

    相关文章

      网友评论

        本文标题:PRIMARY KEY & UNIQUE(主键、唯一索引)

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