欢迎投稿

今日深度:

MySQL索引,mysql索引怎么建立

MySQL索引,mysql索引怎么建立


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

聚簇索引

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

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

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

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

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

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

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

非聚簇索引(二级索引)

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

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

        能找到,不慌哈。

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

覆盖索引

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

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

       

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

 

www.htsjk.Com true http://www.htsjk.com/Mysql/36750.html NewsArticle MySQL索引,mysql索引怎么建立 看了一些MySQL索引方面的东西,这里做一下小结一下(还是怕自己忘了)。涉及的是Innodb引擎以及B+树,如果有误,请各位大佬指出。 聚簇索引 这个东西是...
相关文章
    暂无相关文章
评论暂时关闭