搜尋
首頁資料庫mysql教程關於MySQL資料庫設計總結

規則1:一般情況可以選擇MyISAM儲存引擎,如果需要交易支援必須使用InnoDB儲存引擎。

注意:MyISAM儲存引擎 B-tree索引有一個很大的限制:參與一個索引的所有欄位的長度總和不能超過1000位元組。另外MyISAM資料和索引是分開,而InnoDB的資料儲存是按叢集(cluster)索引有序排列的,主鍵是預設的叢集(cluster)索引,因此MyISAM雖然在一般情況下,查詢效能比InnoDB高,但InnoDB的以主鍵為條件的查詢效能是非常高的。

規則2:命名規則。

  1. 資料庫和表名應盡可能和所服務的業務模組名稱一致

  2. 服務與同一個子模組的一類表應盡量以子模組名(或部分單字)為前綴或後綴

  3. 表名應盡量包含與所存放資料對應的單字

  4. 字段名稱也應盡量保持和實際資料相對應

  5. 聯合索引名稱應盡量包含所有索引鍵欄位名稱或縮寫,且各欄位名稱在索引名中的順序應與索引鍵在索引中的索引順序一致,並儘量包含一個類似idx的前綴或後綴,以表示期物件類型是索引。

  6. 約束等其他物件也應該盡可能包含所屬表或其他物件的名稱,以表明各自的關係

規則3:資料庫字段類型定義

  1. 經常需要計算和排序等消耗CPU的字段,應該盡量選擇更為迅速的字段,如用TIMESTAMP (4個字節,最小值1970-01-01 00:00:00)代替Datetime(8個字節,最小值1001-01-01 00:00:00),透過整數替代浮點型和字元型

  2. 變長欄位使用varcharchar

  3. 對於二進位多媒體數據,流水佇列資料(如日誌),超大文字資料不要放在資料庫欄位中

規則4

:業務邏輯執行過程必須讀到的表中必須要有初始的值。避免業務讀出為負或無窮大的值導致程序失敗

規則5

:並不需要一定遵守範式理論,適度的冗餘,讓Query盡量減少Join

規則6

:存取頻率較低的大字段拆分出資料表。有些大字段佔用空間多,訪問頻率比其他字段明顯少很多,這種情況進行拆分,頻繁的查詢中就不需要讀取大字段,造成IO資源的浪費。

規則7

:大表可以考慮水平拆分。大表影響查詢效率,根據業務特性有很多拆分方式,像根據時間遞增的數據,可以根據時間來分。以id劃分的數據,可依id%資料庫個數的方式來拆分。

規則8

:業務需要的相關索引是根據實際的設計所建構sql語句的where條件來決定的,業務不需要的不要建索引,不允許在聯合索引(或主鍵)中存在多於的欄位。特別是該欄位根本不會在條件語句中出現。

規則9

:唯一確定一筆記錄的一個欄位或多個欄位要建立主鍵或唯一索引,不能唯一決定一筆記錄,為了提高查詢效率建立普通索引

規則10

:業務使用的表,有些記錄數很少,甚至只有一筆記錄,為了約束的需要,也要建立索引或設定主鍵。

規則11

:對於取值不能重複,經常作為查詢條件的字段,應該建唯一索引(主鍵預設唯一索引),並且將查詢條件中該字段的條件置於第一個位置。沒有必要再建立與該欄位有關的聯合索引。

規則12

:對於經常查詢的字段,其值不唯一,也應該考慮建立普通索引,查詢語句中該字段條件置於第一個位置,對聯合索引處理的方法同樣。

規則13

:業務透過不唯一索引存取資料時,需要考慮透過該索引值傳回的記錄稠密度,原則上可能的稠密度最大不能高於0.2,如果稠密度太大,則不合適建立索引了。

當透過這個索引查找得到的資料量占到表內所有資料的20%以上時,則需要考慮建立該索引的代價,同時由於索引掃描產生的都是隨機I/O,生其效率比全表順序掃描的順序I/O低很多。資料庫系統優化query的時候有可能不會用到這個索引。

規則14

:需要聯合索引(或聯合主鍵)的資料庫要注意索引的順序。 SQL語句中的符合條件也要跟著索引的順序一致。

注意:索引的順勢不正確也可能導致嚴重的後果。 ###

規則15:表格中的多個欄位查詢作為查詢條件,不含其他索引,且欄位聯合值不重複,可以在這多個欄位上建立唯一的共同索引,假設索引欄位為(a1,a2,...an),則查詢條件(a1 op val1,a2 op val2,...am op valm)m,可用到索引,查詢條件中字段的位置與索引中的字段位置是一致的。

規則16:聯合索引的建立原則(以下均假設在資料庫表的欄位a,b,c上建立聯合索引(a,b,c))

  1. 聯合索引中的欄位應盡量滿足過濾資料從多到少的順序,也就是說差異最大的欄位應該房子第一個欄位

  2. 建立索引盡量與SQL語句的條件順序一致,使SQL語句盡量以整個索引為條件,盡量避免以索引的一部分(特別是首個條件與索引的首個欄位不一致時)作為查詢的條件

  3. Where a=1,where a>=12 and a=40為條件可以用到此聯合索引;而這些語句where b=10,where c=221,where b>=12 and c=2則無法用到這個聯合索引。

  4. 當需要查詢的資料庫欄位全部在索引中體現時,資料庫可以直接查詢索引得到查詢資訊無須對整個表進行掃描(這就是所謂的key-only ),能大大的提高查詢效率。
    當a,ab,abc與其他表格欄位關聯查詢時可以用到索引

  5. 當a,ab,abc順序而不是b,c,bc,ac為順序執行Order by或group不要時可以用到索引

  6. 以下情況時,進行表掃描然後排序可能比使用聯合索引更加有效
    a.表已經按照索引組織好了
    b.被查詢的資料站所有資料的許多比例。

規則17:當重要業務存取資料表時。但不能透過索引存取資料時,應該確保順序存取的記錄數目是有限的,原則上不多於10.

規則18:合理地建構Query語句

  1. Insert語句中,根據測試,批量一次插入1000條時效率最高,多於1000條時,要拆分,多次進行同樣的插入,應該合併批量進行。注意query語句的長度要小於mysqld的參數max_allowed_pa​​cket

  2. 查詢條件中各種邏輯運算子效能順序是and,or,in,因此在查詢條件中應該盡量避免使用在大集合中使用in

  3. 永遠用小結果集驅動大記錄集,因為在mysql中,只有Nested Join一種Join方式,就是說mysql的join是透過嵌套循環來實現的。透過小結果集驅動大記錄集這個原則來減少嵌套循環的循環次數,以減少IO總量及CPU運算次數

  4. #盡量優化Nested Join內層循環。

  5. 只取需要的columns,盡量不要使用select *

  6. 僅僅使用最有效的過濾字段,where 字句中的過濾條件少為好

  7. 盡量避免複雜的Join和子查詢

    Mysql在並發這塊做得併不是太好,當並發量太高的時候,整體性能會急劇下降,這主要與Mysql內部資源的爭用鎖定控制有關,MyIsam用表鎖,InnoDB好一些用行鎖。

規則19:應用程式系統的最佳化

    1. #合理地使用cache,對於變化較少的部分活躍資料透過應用層的cache緩存到記憶體中,對效能的提升是成數量級的。

    2. 對重複執行相同的query進行合併,減少IO次數。

          c. 事務相關性最小原則

以上是關於MySQL資料庫設計總結的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
MySQL中的存儲過程是什麼?MySQL中的存儲過程是什麼?May 01, 2025 am 12:27 AM

存儲過程是MySQL中的預編譯SQL語句集合,用於提高性能和簡化複雜操作。 1.提高性能:首次編譯後,後續調用無需重新編譯。 2.提高安全性:通過權限控制限制數據表訪問。 3.簡化複雜操作:將多條SQL語句組合,簡化應用層邏輯。

查詢緩存如何在MySQL中工作?查詢緩存如何在MySQL中工作?May 01, 2025 am 12:26 AM

MySQL查詢緩存的工作原理是通過存儲SELECT查詢的結果,當相同查詢再次執行時,直接返回緩存結果。 1)查詢緩存提高數據庫讀取性能,通過哈希值查找緩存結果。 2)配置簡單,在MySQL配置文件中設置query_cache_type和query_cache_size。 3)使用SQL_NO_CACHE關鍵字可以禁用特定查詢的緩存。 4)在高頻更新環境中,查詢緩存可能導致性能瓶頸,需通過監控和調整參數優化使用。

與其他關係數據庫相比,使用MySQL的優點是什麼?與其他關係數據庫相比,使用MySQL的優點是什麼?May 01, 2025 am 12:18 AM

MySQL被廣泛應用於各種項目中的原因包括:1.高性能與可擴展性,支持多種存儲引擎;2.易於使用和維護,配置簡單且工具豐富;3.豐富的生態系統,吸引大量社區和第三方工具支持;4.跨平台支持,適用於多種操作系統。

您如何處理MySQL中的數據庫升級?您如何處理MySQL中的數據庫升級?Apr 30, 2025 am 12:28 AM

MySQL數據庫升級的步驟包括:1.備份數據庫,2.停止當前MySQL服務,3.安裝新版本MySQL,4.啟動新版本MySQL服務,5.恢復數據庫。升級過程需注意兼容性問題,並可使用高級工具如PerconaToolkit進行測試和優化。

您可以使用MySQL的不同備份策略是什麼?您可以使用MySQL的不同備份策略是什麼?Apr 30, 2025 am 12:28 AM

MySQL備份策略包括邏輯備份、物理備份、增量備份、基於復制的備份和雲備份。 1.邏輯備份使用mysqldump導出數據庫結構和數據,適合小型數據庫和版本遷移。 2.物理備份通過複製數據文件,速度快且全面,但需數據庫一致性。 3.增量備份利用二進制日誌記錄變化,適用於大型數據庫。 4.基於復制的備份通過從服務器備份,減少對生產系統的影響。 5.雲備份如AmazonRDS提供自動化解決方案,但成本和控制需考慮。選擇策略時應考慮數據庫大小、停機容忍度、恢復時間和恢復點目標。

什麼是mySQL聚類?什麼是mySQL聚類?Apr 30, 2025 am 12:28 AM

MySQLclusteringenhancesdatabaserobustnessandscalabilitybydistributingdataacrossmultiplenodes.ItusestheNDBenginefordatareplicationandfaulttolerance,ensuringhighavailability.Setupinvolvesconfiguringmanagement,data,andSQLnodes,withcarefulmonitoringandpe

如何優化數據庫架構設計以在MySQL中的性能?如何優化數據庫架構設計以在MySQL中的性能?Apr 30, 2025 am 12:27 AM

在MySQL中優化數據庫模式設計可通過以下步驟提升性能:1.索引優化:在常用查詢列上創建索引,平衡查詢和插入更新的開銷。 2.表結構優化:通過規範化或反規範化減少數據冗餘,提高訪問效率。 3.數據類型選擇:使用合適的數據類型,如INT替代VARCHAR,減少存儲空間。 4.分區和分錶:對於大數據量,使用分區和分錶分散數據,提升查詢和維護效率。

您如何優化MySQL性能?您如何優化MySQL性能?Apr 30, 2025 am 12:26 AM

tooptimizemysqlperformance,lofterTheSeSteps:1)inasemproperIndexingTospeedUpqueries,2)使用ExplaintplaintoAnalyzeandoptimizequeryPerformance,3)ActiveServerConfigurationStersLikeTlikeTlikeTlikeIkeLikeIkeIkeLikeIkeLikeIkeLikeIkeLikeNodb_buffer_pool_sizizeandmax_connections,4)

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器