zoukankan      html  css  js  c++  java
  • MySQL 聚集索引/非聚集索引简述

    MySQL索引中可以分为聚集索引与非聚集索引两类,在网络上也见过聚簇的说法,这里先简单介绍两种索引的含义与适用场景。懒得画图,全是字。


    索引的键值逻辑顺序决定了表数据行的物理存储顺序,也就是在数据库上连接的记录在磁盘上的物理存储地址也是相邻的,注意这一点特性,我们可以分析出它的适用情况。由于聚集索引规定了数据项,也可以说是记录在表中的物理存储顺序,物理顺序唯一,自然每张表中的聚集索引也是唯一的,但是它可以包含多个列,多个字段。

    聚集索引类似于新华字典中用拼音去查找汉字,拼音检索表于书记顺序都是按照a~z排列的,就像相同的逻辑顺序于物理顺序一样,当你需要查找a,ai两个读音的字,或是想一次寻找多个傻(sha)的同音字时,也许向后翻几页,或紧接着下一行就得到结果了。

    进一步来说,当你需要查询的数据经常被分组看待(分类),或是经常查询范围性的数据(本月,本周总结),不同值的小数目等情况时,可以使用聚集索引。


    自然,非聚集索引也就是存储的键值逻辑连续,但是在表数据行物理存储顺序上不一定连续的索引,也就是索引的逻辑顺序与磁盘上的物理存储顺序不同

    非聚集索引类似在新华字典上通过偏旁部首来查询汉字,检索表也许是按照横、竖、撇来排列的,但是由于正文中是a~z的拼音顺序,所以就类似于逻辑地址于物理地址的不对应。同时适用的情况就在于分组,大数目的不同值,频繁更新的列中,这些情况即不适合聚集索引。

    某些情况下索引与物理存储逻辑有关:

    其中存在一种情况,MySQL的MyISAM引擎B+树式的存储结构,把叶子结点上存放的并不是数据本身,而是存放数据的地址,所以在使用索引时,例如主索引、辅助索引有时达不到想要的效果,雅思机经是什么而且都是非聚集索引。

    主键不一定适合加上聚集索引,有时甚至是一种对这个唯一的聚集索引的浪费(虽然在SQLServer中主键默认为聚集索引),并非在任何字段上加上聚集/非聚集索引都能提高查询效率。下面我们结合实际情况分析。

    优势:

    1. 能够保证数据每一行的唯一性
    2. 合理运用时加快数据的查询速度
    3. 增强表与表之间的链接,参考完整性
    4. 减少分组、排序等操作的查询时间
    5. 优化查询过程,提高系统性能

    弊端:

    1. 创建、维护索引的时间会随着数据量的增加而增加
    2. 自然,索引也是需要占据物理空间的
    3. 增删改查数据的时候,也会由于索引的存在而增加时间,类似于多了一个属性,也会降低表更新的速度

    总而言之,这只是MySQL查询时优化速度等方面的冰山一角,还是需要多分析,多考虑,根据实际情况去选择各种辅助功能的使用,才能得到相对最高的效率。

  • 相关阅读:
    数据库中的索引结构是什么?
    什么情况下适合建立索引?
    python requests https 访问出错
    Centos下 自动化配置SSH免密码登陆
    expect 批量增加用户及配置密码
    Shell 处理文件名中包含空格的文件
    Linux sort 命令
    ictclas bug修复
    [转]hadoop2.x常用端口
    在服务器上运行Jar包
  • 原文地址:https://www.cnblogs.com/xiongjim/p/9687549.html
Copyright © 2011-2022 走看看