看了一些MySQL索引方面的東西,這里做一下小結一下(還是怕自己忘了),涉及的是Innodb引擎以及B+樹,如果有誤,請各位大佬指出,
聚簇索引
這個東西是根據主鍵索引形成的一種資料存盤方式 ,
沒有主鍵咋辦呀?不慌,看一下有沒有非空唯一索引;
有好幾個非空唯一索引可咋辦?照樣不慌,Innodb自動選擇你在創建表的時候第一個非空唯一索引作為主鍵,
那要是也沒有非空唯一索引咋辦?那就不用管了,InnoDB會給你隱式定義一個主鍵作為聚簇索引,
簡單來說就是非葉節點是主鍵的值,葉節點指向的是資料表中每一行的資料,回想一下B+樹,那肯定都知道葉子節點都是按順序來排列的,所以大家肯定在一個表中找不到第二個聚簇索引了,
問題來了:我要是不用主鍵查找,那聚簇索引豈不是用不了了?
放心,不能浪費,,,我們闊以建立其他索引,比如說非聚簇索引(又稱二級索引),
非聚簇索引(二級索引)
假如我們給某幾個欄位建了個索引,現在要用它來查找我們需要的資料,咋辦呢?來一個非聚簇索引唄,和聚簇索引不同的是葉子節點只保存了主鍵值,但是聚簇索引葉子節點保存的可是整整一行資料,
嗯?我要主鍵值干哈,我要去找我要的資料,
能找到,不慌哈,
現在聚簇索引又要登場了,所有人都已經猜到,我闊以用這個主鍵值在聚簇索引中進行查找(這里也叫做回表),找到葉子節點,那里有我要找的資料,一行資料都在那里呢,想用哪個欄位用哪個欄位, 開心,(估計二級索引這個名字也就是這么來的,找兩次索引),
覆寫索引
好麻煩,還要找兩次索引,有木有簡單的一個啥索引,我一次就能找到?
有有有,知道不知道覆寫索引呢,簡單來說就是select選擇的欄位恰好包括在我的索引欄位中了,美滋滋,你找的欄位都在我的索引欄位中,那你還在二級索引中回什么表,這里就有你要找的欄位哇,一次 性找到,是不是挺好,所以嘞,以后建立索引的時候多想想,盡量把你select中的欄位包括進去,
推薦初學的,像我一樣的菜雞看高性能MySQL,希望大佬們多賜教,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/125656.html
標籤:MySQL
