優化想法
詳細的MySQL最佳化步驟如下:
- 檢視資料表結構,改善不完全設計
- 跑一遍主要業務,收集常用的資料庫查詢SQL
- 分析查詢SQL,適當拆分,加入索引等最佳化查詢
- 優化SQL的同時,優化程式碼邏輯
- #新增本機快取和redis快取
盡可能不要使用NULL值
因為建表的時候,如果沒有對建立的值設定預設值,MySQL都會設定預設為NULL
。那麼為啥用NULL
不好呢?
-
NULL
使得索引維護更加複雜,強烈建議對索引列設定#NOT NULL
-
NOT IN
、!=
等負向條件查詢在有NULL
值的情況下傳回永遠為空結果,查詢容易出錯 -
NULL
列需要一個額外位元組作為判斷是否為NULL
的標誌位元 - 使用
NULL
時和該列其他的值可能不是同種類型,導致問題。 (在不同的語言中表現不一樣) - MySQL難以優化對可為
NULL
的列的查詢
所以對於那些以前偷懶的字段,手動設定一個預設值吧,空字串呀,0呀補上。
雖然這種方法對於MySQL的效能來說沒有提升多少,但這是一個好習慣,而且以小見大,不要忽略這些細節。
新增索引
對於經常查詢的字段,請加上索引,有索引和沒有索引的查詢速度相差十倍甚至更多。
- 一般來說,每個表都需要有一個主鍵
id
欄位 - 常用於查詢的欄位應該設定索引
-
#varchar
類型的字段,在建立索引的時候,最好指定長度 - 查詢有多個條件時,優先使用具有索引的條件
- 像
LIKE
條件這樣的模糊搜尋對於字段索引是無效的,需要另外建立關鍵字索引來解決 - #請盡量不要在資料庫層級約束表和表之間的關係,這些表之間的依賴應該在程式碼層面去解決
當表和表之間有約束時,雖然增刪查的SQL語句變簡單了,但是帶來的負面效果是插入等操作資料庫都會去檢查約束(雖然可以手動設定忽略約束),這樣相當於把一些業務邏輯寫到了資料庫層,不便於維護。
優化表格欄位結構
資料庫中那些可以用整形表示的資料就不要使用字串類型,到底是用varchar
還是char
要看欄位的可能值。
這種最佳化往往在資料庫中有大量資料以後是不可行的,最好在資料庫設計之前就設計好。
- 對於那些可能值很有限的欄位,使用
tinyint
取代VARCHAR
,- 例如記錄行動裝置平台,只有兩個值:android,ios,那麼就可以使用0表示android,1表示ios,這種欄位一定要寫好註解
- 為什麼不用
ENUM
呢?ENUM
擴充困難,例如後來移動平台又增加了一個ipad
,那豈不是懵逼了,而tinyint
加個2就行,而且ENUM
在程式碼裡面處理起來特別奇怪,是當成整形呢還是字串,各個語言不一樣。 - 這種方式,一定要在資料庫註解或程式碼裡面寫明各個值的意思
- 對於那些定長字串,可以使用
char
,例如郵編,總是5位元 - 對於那些長度未知的字串,使用
varchar
- 不要濫用
bigint
,例如記錄文章數目的表id
字段,用int
就行了,21億篇文章上限夠了 - 適當打破資料庫範式添加冗餘字段,避免查詢時的表連接
查詢的時候,肯定int
類型比varchar
快,因為整數的比較直接呼叫底層運算器就可以實現,而字串比較要逐個字元比較。
定長資料比變長資料查詢快,因為比較定長資料與資料之間的偏移是固定的,很容易計算下一個資料的偏移。而變長資料則還需要多一步去查詢下一個資料的偏移。不過。定長資料可能會浪費更多的儲存空間。
大表拆分
對於那些資料量可能近期會超過500W或成長很快的表,一定要提前做好垂直分錶或水平分錶,當數據量超過百萬以後,查詢速度會明顯下降。
分庫分錶盡量在資料庫設計初期敲定方案,否則後期會大幅增加程式碼複雜度而且不易變更。
垂直分錶是依照日期等外部變數進行分錶,水平分錶是依照表中的某些欄位關係,使用hash映射等分錶。
分庫分錶的前提條件是在執行查詢語句之前,已經知道需要查詢的資料可能會落在哪一個分庫和哪一個分錶中。
最佳化查詢語句
這個才是許多系統資料庫瓶頸的始作俑者。
- 請盡量使用簡單的查詢,避免使用表格連結
- 請盡量避免全表掃描,會造成全表掃描的語句包含但不限於:
- where子句條件恆真或為空
- 使用
LIKE
- #使用不等運算子(、!=)
- 查詢含有
is null
的列 - 在非索引列上使用
or
- 多條件查詢時,請把簡單查詢條件或索引列查詢置於前面
- 請盡量指定需要查詢的列,不要偷懶使用select *
- 如果不指定,一方面會傳回多餘的數據,佔用頻寬等
- 另一方面MySQL執行查詢的時候,沒有欄位時會先去查詢表格結構有哪些欄位
- 大寫的查詢關鍵字比小寫快一點點
- 使用子查詢會建立臨時表,會比連結(JOIN)和聯合(UNION)稍慢
- 在索引欄位上查詢盡量不要使用資料庫函數,不便於快取查詢結果
- 當只要一行資料時,請使用LIMIT 1,如果資料過多,請適當設定LIMIT,分頁查詢
- 千萬不要ORDER BY RAND(),效能極低
#新增快取
使用redis等緩存,還有本機檔案快取等,可以大幅減少資料庫查詢次數。快取這個東西,一定要分析自己系統的資料特點,適當選擇。
- 對於一些常用的數據,例如配置資訊等,可以放在快取中
- 可以在本地快取資料庫的表結構
- 快取的資料一定要注意及時更新,還有設定有效期限
- 增加快取務必會增加系統複雜性,一定要注意權衡
檢查資料表結構
推薦學習:《mysql影片教學》
以上是總結MySQL優化最最基礎的操作的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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

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

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

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

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

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

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

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


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

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

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器