數據存放在數據裏面,索引存放在索引裏
oracle
myisam就是用的這個堆表的存儲方式,oracle支持堆表,pg只支持堆表性能
咱們如今都玩innodb,因此堆表一帶而過,重點關注索引組織表
指針
3.一、一個表A,主鍵值8個字節,每條記錄300個字節,每一個page16k,求這張表B+ tree高度爲1 能存放多少記錄,2呢? 3?
首先,一個頁能存放16k/300個記錄code
也就是說5000w的記錄中找一個主鍵,只要找三個頁,一億和五百億都是找四次,因此表變大,查詢速度不會有變化,最差的hdd盤,一秒鐘能查100次,實際生產中,B+ tree 高度4層差很少了,5層不多,高度越低性能越好blog
DML操做,先找到頁,把這個頁讀到內存中,而後再去操做,只要你內存夠大,頁全放內存中,快的很索引
B+ tree的好處:查某個範圍內,或者某幾條數據,或者根據主鍵來查,很快,可是要把幾千萬數據查一下還要join那確定慢了,固然也能夠作定型、作hash join內存
缺點:插入比較慢hash
3.二、爲何主鍵查詢比二級索引查詢來的快
主鍵索引裏面包含了每一行完整的數據,只要找到那個主鍵就是找到那個記錄,二級索引,若是查詢的列不是索引列,走那個列的索引找到後還要去根據索引裏保存的主鍵去找查詢列的內容,這裏多了一步,這種查找叫書籤查找或者回表,若是一個高度爲3的樹,原本查只要查三個頁,走二級索引就要查六個頁it
a b c 三個列,a是主鍵,b是普通索引innodb
select c from tb; 若是走b列的普通索引,會先找到對應的a,再經過a找到對應的c ①select c where b=? ②select c where a = ?