首頁 資料庫 mysql教程 MySQL 效能優化,讓資料庫跑的更快

MySQL 效能優化,讓資料庫跑的更快

Feb 22, 2017 am 10:52 AM



在資料庫最佳化工作中,使資料盡可能的小,使表在硬碟上佔據的空間盡可能的小,這是最常用、也是最有效的手段之一。因為縮小數據,相對來說可以提高硬碟的讀寫速度,並且在查詢過程中小表的內容處理時所佔用的系統資源比較少。同理,如果在比較小的欄位上設定索引的話,其索引所佔用的資源也會比較少。那麼資料庫管理員該如何給自己的資料減肥呢?對此筆者有以下幾個建議。

 

建議一:空值不一定不佔空間

在這裡筆者先給大家掃盲一下。有些資料庫管理員,認為空值不會佔用系統資源,其實這是一個錯誤的認知。他們在資料庫設計時,不喜歡將欄位的屬性設為NOT NULL。而讓使用者根據自己的需求來輸入資料。筆者認為,這種做法對於資料庫的效能是不利的

筆者的意見是,如果有可能的話,盡量將欄位設為NOT NULL,即不允許有空值。這麼做的話,可以加快後續處理的速度,同時從資料儲存來看還可以使得每列節省一位,從而達到資料減肥的目的。在實際工作中,如果有些情況不需要使用者輸入資料時,也可以透過預設欄位來達到非空的目的。如在薪資系統中,可以將使用者的工作年限預設為0,而不是空白。當然,如果確實需要NULL的話,也沒有辦法。但是身為資料庫工程師來說,要盡量避免使用NULL值。

建議二:使用盡量小的資料型別

資料型別的大小也會影響到基礎表的大小。如對於MEDIUMINT和INT兩個數據類型,其都可以用來保存整數型的數據,只是其能夠保存的精度不同而已。但從儲存資料的角度來看,前者所需的儲存空間比後者節省約25%。為此在能夠使用MEDIUMINT的情況下,就不要使用INT。

另外在定義資料長度的時候,在滿足需求的情況下,也要盡量的短。如現在薪資考核系統中有員工編碼一個欄位。如果企業員工編碼已經確定,有五位字元構成。那麼在定義欄位時,只需要定義5個字元的長度。這不僅可以縮小儲存空間,還可以起到一定的資料校對功能。當使用者輸入的編碼長度超過5位元時,資料將無法儲存。

雖然說保存某個資料可以有很多資料型別可以選擇,也可以定義比較大的字元位數。但選擇盡量小的資料類型,可以幫助降低資料儲存空間,達到資料減肥的目的。從而進一步提升資料庫的效能。 

建議三:索引與資料表大小的關係

筆者在文章一開頭就談到過,如果對於比較小的列設定索引,那麼索引也會佔用比較少的資源。可見,索引與資料表大小也有緊密的關聯。在適當的地方、適當的時機設定適當的索引,也可以達到資料減肥的目的。 

如通常情況下,每張資料表可能會有多個索引,但是主索引往往只有一個。為此對於每張表的主索引應該考慮盡量的短小精悍。這可以幫助資料庫更快的進行識別。

再如盡量對前綴進行索引。如現在有一張表,需要對某個列設定索引。而這個列有一個特點,就是在頭幾個字元上有唯一的前綴。如果存在這種情況的話,那麼緊緊索引這個前綴,而不是全部,效果會更好。在MySQL資料庫中,支援對一個字元列的最左邊部分建立一個索引。這也就是說,資料庫會將某個欄位根據一定的規則拆分為前後兩個部分。拆分後前面一部分的資料如果能夠保持唯一,那麼就只需要對前面一部分設定索引即可,而不需要對整個欄位的資料設定索引。這無疑可以縮小索引所佔用的資源,實現減肥的目的。更短的索引,能夠提供更快的查詢速度。因為它們所佔用的硬碟空間較少,而且他們將在索引快取中保存更多的存取。從而降低硬碟的搜尋次數,提高查詢的效率。

最後要注意的就是,索引不能夠濫用。使用索引確實可以提高資料的處理能力,但是索引同時也會帶來額外的開銷。只有這個收益大於開銷時,使用索引才能夠提升資料庫的效能。否則的話,則會起到相反的效果。如某個表需要進行快速的存儲,如果在這個表上設定過多的索引,索引就會起到副作用。對此筆者建議,如果主要透過搜尋列的組合來存取一個表,那麼最好對他們只設定一個索引。當然,這個索引部分應該是日常工作中最常用的欄位。在不得已的情況下,如果需要使用多個索引的話,那麼最好能夠以更多的副本使用列來獲得更好的索引壓縮。從而降低因為使用了多個索引而增加的資源消耗。

建議四:在需要「豐滿」的地方還是不能夠節省

一個女人,該瘦的地方要瘦,該豐滿的地方要豐滿。其實資料庫也是如此。能夠節省硬碟空間的地方,就要節省。而不能夠節省的地方,則不能夠為了減肥而精簡下來。有時候這會起到適得其反的效果。

筆者以Varchar為例。如在MyISAM標中,如果沒有任何可變長的列,那麼最好使用固定大小的資料類型。雖然採用固定長度的資料類型,往往會浪費一定的儲存空間。因為如果使用者輸入的資料不足,採用固定長度的話,資料儲存時仍會以這個固定的長度來儲存。但是在這種情況下,能夠用固定長度的,還是要使用固定長度。因為這種情況下雖然會浪費一定的硬碟空間,但卻可以提高資料的查詢速度。

可見,並不是在任何情況下對資料減肥都可以提高資料庫的效能。這就好像節支開源,這個節省要節省在刀刃上。否則的話,不但不能夠節支,而且還會搬石頭砸自己的腳。通俗的說,就是該瘦的地方要瘦,該豐滿的地方要豐滿。記住這句話,就對了。

建議五:將表格分割以實現減肥的目的

螞蟻在搬食物時,如果某塊食物過大,無法搬動的話,螞蟻則可能會將這個塊食物進行分割,直到其搬得動為止。這就是分蛋糕原理。其實這種現像在日常工作中常很常見。如我們有一張資料庫表格,如果裡面的紀錄非常多,那麼表格的允許速度會非常的慢。在這種情況下,可以根據一定的規則將表格分為多個工作簿。如現在有企業員工的考勤資訊。對這個表進行查詢、排序、統計時,等待時間非常的長。此時就可以根據部門將其分割成不同的工作簿,然後再對其進行相關的數據分析。此時雖然工作量會大一點,但是其處理的速度會變快許多

根據這個原理,在資料庫優化時,可以將一個經常被掃描的大表分割為2個或2個以上的表示非常有益的。如在日常工作中,筆者現在有一個動態格式的資料表,而這個資料是使用一個掃描表時,就會用這個來找出相關行的比較小的靜態格式的表。

透過這個表格的拆分,可以將一塊大蛋糕分成幾塊小的蛋糕,以利於後續資料的統計與分析。當然這個效果的好壞,直接跟這個分割的規則有關。關於表如何拆分才能夠達到理想的效果,這又是一個比較大的話題。由於這裡篇幅有限,筆者不做過多的說明。或許在後續的文章中,筆者會以這命題進行展開,給大家做詳細的說明。

以上就是MySQL 效能優化,讓資料庫跑的更快的內容,更多相關內容請關注PHP中文網(www.php.cn)!


本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

MySQL:初學者的數據管理易用性 MySQL:初學者的數據管理易用性 Apr 09, 2025 am 12:07 AM

MySQL適合初學者使用,因為它安裝簡單、功能強大且易於管理數據。 1.安裝和配置簡單,適用於多種操作系統。 2.支持基本操作如創建數據庫和表、插入、查詢、更新和刪除數據。 3.提供高級功能如JOIN操作和子查詢。 4.可以通過索引、查詢優化和分錶分區來提升性能。 5.支持備份、恢復和安全措施,確保數據的安全和一致性。

phpmyadmin怎麼打開 phpmyadmin怎麼打開 Apr 10, 2025 pm 10:51 PM

可以通過以下步驟打開 phpMyAdmin:1. 登錄網站控制面板;2. 找到並點擊 phpMyAdmin 圖標;3. 輸入 MySQL 憑據;4. 點擊 "登錄"。

navicat premium怎麼創建 navicat premium怎麼創建 Apr 09, 2025 am 07:09 AM

使用 Navicat Premium 創建數據庫:連接到數據庫服務器並輸入連接參數。右鍵單擊服務器並選擇“創建數據庫”。輸入新數據庫的名稱和指定字符集和排序規則。連接到新數據庫並在“對象瀏覽器”中創建表。右鍵單擊表並選擇“插入數據”來插入數據。

mysql:簡單的概念,用於輕鬆學習 mysql:簡單的概念,用於輕鬆學習 Apr 10, 2025 am 09:29 AM

MySQL是一個開源的關係型數據庫管理系統。 1)創建數據庫和表:使用CREATEDATABASE和CREATETABLE命令。 2)基本操作:INSERT、UPDATE、DELETE和SELECT。 3)高級操作:JOIN、子查詢和事務處理。 4)調試技巧:檢查語法、數據類型和權限。 5)優化建議:使用索引、避免SELECT*和使用事務。

MySQL和SQL:開發人員的基本技能 MySQL和SQL:開發人員的基本技能 Apr 10, 2025 am 09:30 AM

MySQL和SQL是開發者必備技能。 1.MySQL是開源的關係型數據庫管理系統,SQL是用於管理和操作數據庫的標準語言。 2.MySQL通過高效的數據存儲和檢索功能支持多種存儲引擎,SQL通過簡單語句完成複雜數據操作。 3.使用示例包括基本查詢和高級查詢,如按條件過濾和排序。 4.常見錯誤包括語法錯誤和性能問題,可通過檢查SQL語句和使用EXPLAIN命令優化。 5.性能優化技巧包括使用索引、避免全表掃描、優化JOIN操作和提升代碼可讀性。

navicat怎麼新建連接mysql navicat怎麼新建連接mysql Apr 09, 2025 am 07:21 AM

可在 Navicat 中通過以下步驟新建 MySQL 連接:打開應用程序並選擇“新建連接”(Ctrl N)。選擇“MySQL”作為連接類型。輸入主機名/IP 地址、端口、用戶名和密碼。 (可選)配置高級選項。保存連接並輸入連接名稱。

navicat如何執行sql navicat如何執行sql Apr 08, 2025 pm 11:42 PM

在 Navicat 中執行 SQL 的步驟:連接到數據庫。創建 SQL 編輯器窗口。編寫 SQL 查詢或腳本。單擊“運行”按鈕執行查詢或腳本。查看結果(如果執行查詢的話)。

Navicat 連接數據庫錯誤代碼及解決辦法 Navicat 連接數據庫錯誤代碼及解決辦法 Apr 08, 2025 pm 11:06 PM

Navicat 連接數據庫時常見的錯誤及解決方案:用戶名或密碼錯誤(Error 1045)防火牆阻止連接(Error 2003)連接超時(Error 10060)無法使用套接字連接(Error 1042)SSL 連接錯誤(Error 10055)連接嘗試過多導致主機被阻止(Error 1129)數據庫不存在(Error 1049)沒有權限連接到數據庫(Error 1000)

See all articles