MariaDB速度慢?進階正確使用,沒設定對,不要再嫌棄他慢24.04|22.04|20.04|18.04

更新於 2024/07/09閱讀時間約 5 分鐘

一開始先定義好你的需求: 你需要極高的讀取效率或是極高的寫入效率? 需求定義好之後,我們就開始今天的內容。


講結論:

需要極高讀取效率請選擇MyISAM 儲存引擎;

需要極高寫入效率請選擇InnoDB 儲存引擎;


MyISAM/InnoDB原理與比較:


原理相異處:

MyISAM 儲存引擎採用了一種稱為「表層級鎖定」(Table-level Locking)的鎖定機制,這意味著對於一張表的讀取操作和寫入操作是互斥的,也就是說,當一個執行緒在寫入資料時,其他所有執行緒都不能進行任何讀寫操作。但是,在讀取數據時,MyISAM 儲存引擎可以使用「同時讀」(Concurrent Reading)的方式,多個執行緒可以同時讀取同一張表中的數據,因此 MyISAM 儲存引擎的讀取效率非常高。


InnoDB 儲存引擎採用了一種更細緻的鎖定機制,即「行層級鎖定」(Row-level Locking)。這種鎖定機制可以保證在Concurrent的情況下,每個執行緒都只鎖定自己需要的行而不是整張表,從而避免了 MyISAM 儲存引擎的寫入衝突問題。因此,InnoDB 儲存引擎在寫入資料時會比 MyISAM 儲存引擎更有效率。


結構部分:

MyISAM:每個MyISAM在磁碟上儲存成三個檔案。名列前茅的文件的名字會以表的名字開始,副檔名是文件類型。.frm檔案儲存表定義。資料檔案的副檔名為.MYD (MYData)。索引檔的副檔名是.MYI (MYIndex)。


InnoDB:基於磁碟的資源是InnoDB表空間資料檔案和它的日誌文件,InnoDB 表的大小只受限於作業系統文件的大小,一般為 2GB。



任務部分:

MyISAM類型的表格強調的是效能,其執行數度比InnoDB類型更快,但不提供交易支援。

InnoDB提供交易支援,外鍵(foreign key)等高階資料庫功能。


SELECT UPDATE,INSERT,DELETE操作部分:


MyISAM:因為鎖定寫入,天然的適合執行大量的SELECT。


InnoDB:如果要執行大量的INSERT或UPDATE,出於效能方面的考慮,應該使用InnoDB表。

DELETE FROM table時,InnoDB不會重新建立表,而是一行一行的刪除。

LOAD TABLE FROM MASTER操作對InnoDB是不起作用的,解決方法是先把InnoDB表改成MyISAM表,導入資料後再改成InnoDB表,但是對於使用的額外的InnoDB特性(例如外鍵)的表不適用。



AUTO_INCREMENT的操作部分:

MyISAM:INSERT和UPDATE作業時自動更新列。這使得AUTO_INCREMENT列更快(至少10%)。在序列頂的值被刪除之後就不能再用。 (當AUTO_INCREMENT列被定義為多列索引的最後一列,可以出現重複使用從序列頂部刪除的值的情況)。

AUTO_INCREMENT值可用ALTER TABLE或myisamch來重設。

對於AUTO_INCREMENT類型的欄位,InnoDB中必須包含只有該欄位的索引,但是在MyISAM表中,可以和其他欄位一起建立聯合索引。


InnoDB:如果為一個表指定AUTO_INCREMENT,在資料詞典裡的InnoDB表將包含一個名為自動計數器的計數器,它被用在為該列賦予新值。

自動增長計數器僅儲存在主記憶體中,而不是存在磁碟上。


表的具體行數不同部分:

MyISAM:select count() from table,MyISAM只要簡單的讀出保存好的行數,注意的是,當count()語句包含 where條件時,兩種表的操作是一樣的。

InnoDB:InnoDB 中不保存表格的具體行數,也就是說,執行select count(*) from table時,InnoDB要掃描一遍整個表來計算有多少行。


鎖不同的部分:

MyISAM:以表為鎖。

InnoDB:提供行鎖(locking on row level),提供與Oracle 類型一致的不加鎖讀取(non-locking read in SELECTs),另外,InnoDB表的行鎖也不是絕對的,如果在執行一個SQL語句時MySQL無法確定要掃描的範圍,InnoDB表同樣會鎖定全表,例如update table set num=1 where name like “%H%”。


MYISAM和INNODB是MariaDB提供的兩種儲存引擎。兩者的優劣可謂各有千秋。 INNODB會支援一些關聯式資料庫的高階功能,MYISAM不支援。但MYISAM的性能更優,佔用的儲存空間少。所以,選擇何種儲存引擎,視具體應用而定。


如果你的應用程式一定要使用多元或高階功能,毫無疑問你要選擇INNODB引擎。但要注意,INNODB的行級鎖定是有條件的。在where條件沒有使用主鍵時,照樣會鎖定全表。例如DELETE FROM ATable這樣的刪除語句。


如果你的應用程式對查詢效能要求較高,就要使用MYISAM了。 MYISAM索引和資料是分開的,而且其索引是壓縮的,可以更好地利用記憶體。所以它的查詢效能明顯優於INNODB。壓縮後的索引也能節省一些磁碟空間。 MYISAM擁有全文索引的功能,這可以大幅優化LIKE查詢的效率。


有人說MYISAM只能用於小型應用,其實這只是一種偏見。如果資料量比較大,這是需要透過升級架構來解決,例如分表分庫(實際上真實的檔案獨立等),而不是單純地依賴儲存引擎。




avatar-img
5會員
75內容數
記錄生活與技術的小細節
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
iBonnie_愛邦尼 的其他內容
在 Ubuntu上,要刪除 MariaDB,請使用下命令: sudo apt autoremove mariadb-server mariadb-client --purge -y 在開啟的「套件配置」精靈中,選擇「是」選項以刪除所有 MariaDB 資料庫: 如您所見,我們已成功從 Ubun
登入資料庫方式,請執行以下的命令: sudo mysql -u root -p 建立一個新資料庫,我們建立“itslinuxfoss”資料庫為例: CREATE DATABASE itslinuxfoss; 為新建立的資料庫設定新的使用者名稱和密碼: GRANT ALL PRIVILEGE
Install Java (OpenJDK) on Ubuntu: sudo apt update && sudo apt -y install default-jdk java -version Add repository and install DBeaver CE: curl -
Update system packages sudo apt update && sudo apt upgrade -y Install additional dependencies sudo apt-get install wget software-properties-common
在 Ubuntu上,要刪除 MariaDB,請使用下命令: sudo apt autoremove mariadb-server mariadb-client --purge -y 在開啟的「套件配置」精靈中,選擇「是」選項以刪除所有 MariaDB 資料庫: 如您所見,我們已成功從 Ubun
登入資料庫方式,請執行以下的命令: sudo mysql -u root -p 建立一個新資料庫,我們建立“itslinuxfoss”資料庫為例: CREATE DATABASE itslinuxfoss; 為新建立的資料庫設定新的使用者名稱和密碼: GRANT ALL PRIVILEGE
Install Java (OpenJDK) on Ubuntu: sudo apt update && sudo apt -y install default-jdk java -version Add repository and install DBeaver CE: curl -
Update system packages sudo apt update && sudo apt upgrade -y Install additional dependencies sudo apt-get install wget software-properties-common
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
我想用愛心進行提問:地球人,能否示範給星星兒看? 當然,主要是能用星星兒具理解的方式。 如果做不到,那麼,不就沒有必要傷害星星兒嗎? 因為,星星兒的學習速度慢,反而得不到肯定。 照顧者務必在離開人世前,訓練好星星兒 相信大部分的地球人,根本見不到星星兒和照顧者都有在努力。 既然見不到,那
這問題要問我,我只能說,大部分來說,沒有錯。 只是,因為自閉症者的固著性,連基本的「變通」,也學的慢。 因為自閉症者的固著性,導致無法順利的短時間適應轉變 問題找出來了,那麼,就放任自閉症者不管? 事實上,完全不是。 其實,主要以「陪伴」自閉症者為主。 在自閉症者遇到轉變而不知如何因應,
會想提這主題,是因為今天在慈惠日間見到一件值得警剔的事實。 就是,徐姓學員,到康復之家偷東西。 其實,在基督教的十誡,有一誡是,不可偷盜。 就算是未信主者,只要有讀過書,都知道這事實。 而自閉症者的話,直接強制送到急性病房,反而有反效果。 因為,自閉症者,在建立〝持有權〞的認知,慢到爆。
在全聯,見到很多的顧客大排長龍,都有廣播,請支援收銀。 這麼做,是讓別的顧客有別的選擇,也可以讓部分的顧客,一來是節省時間,二來是能順利在買完東西後,去做別的重要事。 因此,見到速度慢的自閉症店員,可以請店長來。 甚至,自閉症店員也可以藉由廣播,來協助自閉症店員分擔人力。 因此,要是有顧客見到這情況
(續上篇) 離開台北時,我在網路上買了一輛福特汽車,用三萬元買下它,這個價錢,我想已經不需要用其他形容詞來描述它的裝備和性能,雖然如此,這一輛老舊汽車,還是滿足了我一些心理與生活上的需求,可以將我帶到更遠的另一個世界,雖然速度慢了一點,不過也少了些風風雨雨。
Thumbnail
怎麼正確參拜神社「二拜二拍手一拜」? 想來聊進階版,拿顯微鏡放大細節。
1. $ C:\wamp64\bin\mariadb\mariadb10.6.3\bin\mysql.exe -u username -p --default-character-set=utf8 2. 選擇db: $ use dbname; 3. 匯入資料: $ source c:\xxx.sq
Thumbnail
新型冠狀病毒肺炎(COVID-19)本土確診數降不下來,大家都想知道疫情何時趨緩。星座專家唐綺陽(1日)在臉書表示,6月是混亂的狀態,但會往「越來越正確」的方向前進,並說6月下旬事情會出現轉折。 唐綺陽指出,6月的確充滿轉折和變數,「挑戰、反思多,追悔也多,但悔恨無用」,尤其中旬是關鍵,而這
Thumbnail
進彎前先煞車,然後帶著煞車退檔,到了進彎點開始傾倒、轉向,看到APEX油門轉到底出彎...這是一般我們對處理彎道的認知,也是大部分騎士心中的Common sense 參照:基本轉角處理,你真的會外內外嗎? 但是如果遇到半徑超級大、長度又遠的大回轉彎道,這個原則又要做些修正而成為所謂的DOUBLE
Thumbnail
作者推薦本文原因: 如果遇到EXCEL檔案太胖怎麼辦呢? Excel表格通常只有文字內容,按常理來說,應該是佔不了多大空間,但卻不知道為什麼卻總是佔用電腦一堆記憶體,打開和保存檔案的速度也特別的慢,有時候還會導致電腦當掉,非常令人苦惱。 原文來源:檔案太「胖」開啟速度慢?一分鐘壓縮excel檔案優化
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
我想用愛心進行提問:地球人,能否示範給星星兒看? 當然,主要是能用星星兒具理解的方式。 如果做不到,那麼,不就沒有必要傷害星星兒嗎? 因為,星星兒的學習速度慢,反而得不到肯定。 照顧者務必在離開人世前,訓練好星星兒 相信大部分的地球人,根本見不到星星兒和照顧者都有在努力。 既然見不到,那
這問題要問我,我只能說,大部分來說,沒有錯。 只是,因為自閉症者的固著性,連基本的「變通」,也學的慢。 因為自閉症者的固著性,導致無法順利的短時間適應轉變 問題找出來了,那麼,就放任自閉症者不管? 事實上,完全不是。 其實,主要以「陪伴」自閉症者為主。 在自閉症者遇到轉變而不知如何因應,
會想提這主題,是因為今天在慈惠日間見到一件值得警剔的事實。 就是,徐姓學員,到康復之家偷東西。 其實,在基督教的十誡,有一誡是,不可偷盜。 就算是未信主者,只要有讀過書,都知道這事實。 而自閉症者的話,直接強制送到急性病房,反而有反效果。 因為,自閉症者,在建立〝持有權〞的認知,慢到爆。
在全聯,見到很多的顧客大排長龍,都有廣播,請支援收銀。 這麼做,是讓別的顧客有別的選擇,也可以讓部分的顧客,一來是節省時間,二來是能順利在買完東西後,去做別的重要事。 因此,見到速度慢的自閉症店員,可以請店長來。 甚至,自閉症店員也可以藉由廣播,來協助自閉症店員分擔人力。 因此,要是有顧客見到這情況
(續上篇) 離開台北時,我在網路上買了一輛福特汽車,用三萬元買下它,這個價錢,我想已經不需要用其他形容詞來描述它的裝備和性能,雖然如此,這一輛老舊汽車,還是滿足了我一些心理與生活上的需求,可以將我帶到更遠的另一個世界,雖然速度慢了一點,不過也少了些風風雨雨。
Thumbnail
怎麼正確參拜神社「二拜二拍手一拜」? 想來聊進階版,拿顯微鏡放大細節。
1. $ C:\wamp64\bin\mariadb\mariadb10.6.3\bin\mysql.exe -u username -p --default-character-set=utf8 2. 選擇db: $ use dbname; 3. 匯入資料: $ source c:\xxx.sq
Thumbnail
新型冠狀病毒肺炎(COVID-19)本土確診數降不下來,大家都想知道疫情何時趨緩。星座專家唐綺陽(1日)在臉書表示,6月是混亂的狀態,但會往「越來越正確」的方向前進,並說6月下旬事情會出現轉折。 唐綺陽指出,6月的確充滿轉折和變數,「挑戰、反思多,追悔也多,但悔恨無用」,尤其中旬是關鍵,而這
Thumbnail
進彎前先煞車,然後帶著煞車退檔,到了進彎點開始傾倒、轉向,看到APEX油門轉到底出彎...這是一般我們對處理彎道的認知,也是大部分騎士心中的Common sense 參照:基本轉角處理,你真的會外內外嗎? 但是如果遇到半徑超級大、長度又遠的大回轉彎道,這個原則又要做些修正而成為所謂的DOUBLE
Thumbnail
作者推薦本文原因: 如果遇到EXCEL檔案太胖怎麼辦呢? Excel表格通常只有文字內容,按常理來說,應該是佔不了多大空間,但卻不知道為什麼卻總是佔用電腦一堆記憶體,打開和保存檔案的速度也特別的慢,有時候還會導致電腦當掉,非常令人苦惱。 原文來源:檔案太「胖」開啟速度慢?一分鐘壓縮excel檔案優化