• MySQL 索引


    聚簇索引和非聚簇索引:

    图片来源:http://blog.csdn.net/voidccc/article/details/40077329

         聚簇索引:

         按照每张表的主键构造一颗B+树,叶子节点存放的就是行记录的所有数据,也将聚簇索引的叶子节点成为数据页。页与页之间通过双向链表链接,页按照主键的顺序排序。每张表只能有一个聚簇索引。

           对于主键的排序查询和范围查询非常快,叶子节点上的数据就是用户要查找的数据。

      辅助索引:

      要索引数据和行数据所对应的主键地址。若通过辅助索引查询数据的时候,InnoDB存储引擎会遍历辅助索引并通过叶子节点的主键地址找到一个完整的行记录。

      对一些统计查询,可以直接通过辅助索引来计算减少IO操作。

     联合索引:辅助索引是对单个列进行索引,而联合索引是对表上的多个列进行索引。

      查询的时候,可以两个条件一起所索引,可以只有父和子条件一起,也可以单独父条件,但是不能单独子条件,因为子条件的索引是关联到父索引中的。

      联合索引对索引列中的数据 都做了排序处理,所以可以更快查询数据。比如基于某一类的商品的价格排序,就可以使用多列索引。这样在第二列排序的时候,就不用使用filesor额外排序了。

    覆盖索引:从辅助索引中就可以查得到的记录,而不用通过辅助索引回查到聚簇索引中的记录。

           好处是不包含整行记录的所有信息,大小要远小于聚簇索引,可以减少大量的IO操作。

     通过 Explain 分析低效SQL

     

    type:

    all       全表扫描
    
    index     索引全扫描
    
    range     索引范围扫描
    
    ref       使用非唯一索引
    
    eq_ref    唯一索引
    
    const/system 表单中最多有一个匹配查询起来非常迅速

    null    不用访问表或者索引 就可以直接得到结果

    show profile 分析SQL

    set profiling=1; #默认profiling 是关闭的 这里开启session 级别profiling
    select @@profiling; #查看设置结果

  • 相关阅读:
    对于工程师责任和责任边界的认知
    windows消息机制与实例
    final阶段团队贡献分分配
    Final阶段用户调查报告
    对金州勇士团队的项目进行功能分解(加分作业)
    final review 报告
    final发布评论
    本周PSP
    final发布视频
    【转】mac版微信web开发者工具(小程序开发工具)无法显示二维码 解决方案
  • 原文地址:https://www.cnblogs.com/alin-qu/p/8093934.html
Copyright © 2020-2023  润新知