列表儲存本質以及索引為什麼從0開始

2022-05-17 06:27:41 字數 612 閱讀 4882

首先我們知道int資料型別是佔1個位元組也就是8位二進位制,圖中列表li裡面有4個int資料,那麼記憶體系統是怎麼儲存的呢

儲存過程:

1、系統會先開闢乙個記憶體單元起始位置,例如圖中的0x23

2、遍歷每個元素的資料型別繼續開闢相應大小的記憶體空間

例如途中每個元素都是int型別,所以連續開闢的空間都是乙個位元組大小

3、為什麼計算機資料索引都是從0開始

這種連續儲存單元每個的大小都是相同的,叫做連續儲存。

那麼問題來了,列表不僅可以儲存int還可以儲存char這兩種資料型別單元位元組長度不一致,那麼列表又是怎樣建立連續的儲存單元去索引的呢?

實際上對應元素不同的情況,列表先隨機分配建立儲存空間儲存元素,然後建立連續的儲存位址,每個儲存位址又將儲存元素的儲存空間的起始位置記錄下來,

這樣我們們就可以根據連續的儲存位址來找到真實儲存元素的儲存空間的位址

我們為什麼要用索引,用索引為什麼比不用索引快

經過老楊的細心指點,我才真正的明白 理解 記住 以前曾看過索引的資料,時間長都忘啦 老楊問我如果一張表上沒有索引,你要查id 5的記錄,資料庫會怎麼做?我說資料庫會先根據資料字典找到這張表,然後根據表頭的記錄找到這張表的資料塊,然後每個資料塊去找。老楊 會把所有的資料塊都掃一遍嗎?我 有可能會,有可...

Mysql使用索引為什麼會變快?

mysql 使用的是 btree 索引,那它是怎麼加速檢索的呢?檢索中主要耗時在於記憶體與磁碟的io耗時,所以加速的關鍵在於減少io的次數。圖中是一顆 b 樹,每個磁碟塊包含幾個資料項和指標,如磁碟塊 1 包含資料項 17 和 35,包含指標 p1 p2 p3,p1指向包含資料項小於17的磁碟塊,p...

索引為什麼降低了查詢的速度?

在碩士期間,同學去參加了國內某b2c的公司的面試,回來的時候,很鬱悶的跟我說,面試官問了他乙個資料庫的問題,在乙個查詢中,使用了某個索引所施加的列作為過濾條件 例如 select a,b from t where c x,其中c是表t的乙個字段,該字段上建立了索引 當資料庫使用該索引時,速度比不使用...