MySQL索引和引擎

2021-10-05 15:02:24 字數 2177 閱讀 3378

在使用mysql或其他資料庫的時候,往往需要給表新增索引,這樣一般可以給資料的查詢速度帶來極大的提公升。

索引,可以理解成一本書的目錄,用於快速了解和定位書本中的內容。而在mysql中,索引是幫助其高效獲取資料的、已排好序資料結構

比如現在,mysql中有這麼一張表 test,需要進行查詢(select * from test where id = 5)

idvalue112

2233232

4121545

667755

在不使用索引時,mysql將會對全表進行掃瞄,取得滿足條件的資料。這樣的話,如果資料量特別大,這樣就會很浪費時間了。所以,為了提公升效率,對錶加入索引。

使用不同索引進行檢測

假設使用二叉樹結構

根據二叉樹的特性,在進行資料查詢時只需要對某一側進行查詢即可,確實可以縮短查詢需要的時間,但這樣還是需要進行5次查詢,在資料量大時依舊不是最優的結構。

假設使用紅黑樹

紅黑樹能夠保持自動平衡,這的確縮短了查詢的時間,可是如果存在大量資料,則紅黑樹的層數將很高,這樣的話,就需要進行一層一層的查詢,一次次的io,必然影響了效能;所以這依舊不是最優的方案。

假設使用hash表/雜湊表(mysql自帶)

根據關鍵碼值(key value)而直接進行訪問的資料結構。也就是說,它通過把關鍵碼值對映到表中乙個位置來訪問記錄,以加快查詢的速度。但是,在進行範圍查詢時,就失去了優勢了。

葉子節點具有相同的深度,乙個節點中有多個索引和資料,且節點中的資料索引從左到右依次遞增,但是沒有很好的辦法解決範圍查詢的問題。

b+tree(b-tree的變種,mysql自帶、預設)

非葉子節點不儲存data,只儲存索引,這樣可以儲存更多的索引、降低樹高度;資料記錄都存放在葉子節點中,且葉子節點之間還有鏈指標,滿足了範圍查詢問題。

在使用時常見的m有sql表引擎有myisam和innodb。

建立myisam引擎的表

-- 在建立時需要指定引擎

create

table

temp

(id int(10

)primary

key,

name varchar(50

),age int(10

))engine

=myisam;

此時檢視$mysql_path/data/test,可以看到會多出三個檔案:temp.frm、temp.myd、temp.myi

-- 對應資料表結構的定義檔案

temp

.frm

-- 儲存所有資料行

temp

.myd

-- 儲存了索引

temp

.myi

當有相關查詢時,資料庫就會通過temp.myi檔案快速定位到元素;在myisam引擎中,b+tree的葉子節點的data元素儲存的是元素行的磁碟檔案指標,所以它會去查詢temp.myd檔案,從中取得資料。建立一張student表,若沒有修改過sql配置,那麼預設就是innodb引擎

此時檢視$mysql_path/data/test,可以看到多出兩個檔案:student.frm、student.ibd

-- 對應資料表結構的定義檔案

student.frm

-- 儲存了完整的索引以及資料記錄

student.ibd

MySQL引擎 索引和優化

mysql引擎 索引和優化 li 一 儲存引擎 儲存引擎,mysql中的資料用各種不同的技術儲存在檔案 或者記憶體 中。這些技術中的每一種技術都使用不同的儲存機制 索引技巧 鎖定水平並且最終提供廣泛的不同的功能和能力。通過選擇不同的技術,你能夠獲得額外的速度或者功能,從而改善你的應用的整體功能。in...

MySql儲存引擎和索引

mysql的儲存引擎表示的是mysql中資料庫表的儲存型別,不同儲存型別,表的儲存方式都不相同。檢視當前mysql版本支援哪些引擎,可以輸入以下命令 mysql show engines g 可以發現有很多儲存引擎,這裡只討論innodb myisam memory這三種。innodb innodb...

MySQL的索引和儲存引擎

參考文章內容 mysql索引 黃文博 mysql入門教程 mysql tutorial book 二 關於索引 資料庫儲存引擎是資料庫底層軟體組織,資料庫管理系統 dbms 使用資料引擎進行建立 查詢 更新和刪除資料。不同的儲存引擎提供不同的儲存機制 索引技巧 鎖定水平等功能,使用不同的儲存引擎,還...