美文网首页数据库知识学习
Mysql中索引深入学习

Mysql中索引深入学习

作者: ___TheOne___ | 来源:发表于2018-06-16 15:37 被阅读53次

    1.数据库中索引概念

    在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。

    2.索引优点和缺点

    1>优点

    索引可以避免全表扫描,加快查询速度。多数查询可以仅扫描少量索引页及数据页,而不是遍历所有数据页。一些情况下,索引还可用于避免排序操作。

    2>缺点

    当插入一条新的记录时,需要额外维护索引数据结构。

    3.Mysql中索引的数据结构:BTree或Hash

    在Mysql数据库中,为表中的某个字段添加索引有两种数据结构可以选择,一种是BTree,一种是Hash。


    mysql索引类型

    B树和Hash定义拓展:
    1>B树(英语:B-tree)是一种自平衡的,能够保持数据有序。这种数据结构能够让查找数据、顺序访问、插入数据及删除的动作,都在对数时间O(log n)内完成。B树,概括来说是一个一般化的二叉查找树(binary search tree),可以拥有多于2个子节点。

    2>散列函数(英语:Hash function)又称散列算法哈希函数,是一种从任何一种数据中创建小的数字“指纹”的方法。散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来。该函数将数据打乱混合,重新创建一个叫做散列值(hash values,hash codes,hash sums,或hashes)的指纹。散列值通常用一个短的随机字母和数字组成的字符串来代表。好的散列函数在输入域中很少出现散列冲突。在散列表数据处理中,不抑制冲突来区别数据,会使得数据库记录更难找到。

    4.组合索引---最左前缀原则

    最左前缀原则:在sql where 子句中一些条件或表达式中出现的列的顺序要保持和多索引的一致或以多列索引顺序出现。只要出现非顺序出现、断层都无法利用到多列索引。
    假如:现在对于一个table建立了一个组合索引(A,B,C),那么对于查询时where语句查询条件必须为(A)或(A,B)或(A,B,C)才能使用组合索引用于查询。而(B,C)则无法利用之前加的组合索引。
    为什么呢?
    因为我们知道mysql为btree索引,对于每一个点索引数据都会维护一个(A,B,C)的复合数据结构,我们在Query的时候一定会以一个字段为第一个匹配,第一个字段匹配之后选取第二个字段进行匹配依次类推。那么对于(B,C)(B)(C)这样的情况没有第一个匹配项,自然不会走索引。

    参考文章

    1.聊聊Mysql索引查询技巧---组合索引实践
    2.MySQL BTree索引和hash索引的区别

    相关文章

      网友评论

        本文标题:Mysql中索引深入学习

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