zoukankan      html  css  js  c++  java
  • 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; #查看设置结果

  • 相关阅读:
    CentOS 下实现两台服务器之间的共享NFS
    CentOS 下安装无线哥的老爷机DELL的无线驱动
    PHP 如何读取一个1G的文件大小
    php 经典的算法题你懂的
    mongodb与mysql命令对比
    TCP协议的三次握手和四次挥手过程
    java 发送带Basic Auth认证的http post请求实例代码
    HTTP基本认证(Basic Authentication)的JAVA实例代码
    Http协议
    MySQL主从同步那点事儿
  • 原文地址:https://www.cnblogs.com/alin-qu/p/8093934.html
Copyright © 2011-2022 走看看