zoukankan      html  css  js  c++  java
  • MySQL索引

    看了一些MySQL索引方面的东西,这里做一下小结一下(还是怕自己忘了)。涉及的是Innodb引擎以及B+树,如果有误,请各位大佬指出。

    聚簇索引

            这个东西是根据主键索引形成的一种数据存储方式 。

            没有主键咋办呀?不慌,看一下有没有非空唯一索引;

            有好几个非空唯一索引可咋办?照样不慌,Innodb自动选择你在创建表的时候第一个非空唯一索引作为主键。

            那要是也没有非空唯一索引咋办?那就不用管了,InnoDB会给你隐式定义一个主键作为聚簇索引。

            简单来说就是非叶节点是主键的值,叶节点指向的是数据表中每一行的数据,回想一下B+树,那肯定都知道叶子节点都是按顺序来排列的,所以大家肯定在一个表中找不到第二个聚簇索引了。      

            问题来了:我要是不用主键查找,那聚簇索引岂不是用不了了?  

            放心,不能浪费。。。我们阔以建立其他索引,比如说非聚簇索引(又称二级索引)。                                                                                                                            

    非聚簇索引(二级索引)

            假如我们给某几个字段建了个索引,现在要用它来查找我们需要的数据,咋办呢?来一个非聚簇索引呗,和聚簇索引不同的是叶子节点只保存了主键值,但是聚簇索引叶子节点保存的可是整整一行数据。

            嗯?我要主键值干哈,我要去找我要的数据。

            能找到,不慌哈。

            现在聚簇索引又要登场了,所有人都已经猜到,我阔以用这个主键值在聚簇索引中进行查找(这里也叫做回表),找到叶子节点,那里有我要找的数据,一行数据都在那里呢,想用哪个字段用哪个字段,             开心。(估计二级索引这个名字也就是这么来的,找两次索引)。

    覆盖索引

            好麻烦,还要找两次索引,有木有简单的一个啥索引,我一次就能找到?

            有有有,知道不知道覆盖索引呢,简单来说就是select选择的字段恰好包括在我的索引字段中了,美滋滋。你找的字段都在我的索引字段中,那你还在二级索引中回什么表,这里就有你要找的字段哇。一次           性找到,是不是挺好,所以嘞,以后建立索引的时候多想想,尽量把你select中的字段包括进去。

           

            推荐初学的,像我一样的菜鸡看高性能MySQL,希望大佬们多赐教。

  • 相关阅读:
    VMWare安装win10提示units specified don’t exist, SHSUCDX can’t install
    WinXP.Http.Post请求错误提示:基础连接已经关闭:发送时发生错误
    如何用PostMan请求WebApi
    无法解决 equal to 运算中 "Chinese_PRC_CI_AS" 和 "Chinese_PRC_CI_AS_WS" 之间的排序规则冲突 解决
    c# Winform PropertyGrid 实现下拉框 多选
    c# Winform GridControl 给列自动生成快捷操作按钮
    Tomcat启动报内存溢出错误:java.lang.OutOfMemoryError: PermGen space异常 解决
    Net Core 项目引用Exceptionless记录使用
    .Net 开源异常日志ExceptionLess搭建
    c# AutoMapper 扩展
  • 原文地址:https://www.cnblogs.com/xp1234/p/11610177.html
Copyright © 2011-2022 走看看