本篇文章給大家詳細介紹mysql理論和基礎知識。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有幫助。
mysql架構
一、網路連線層
客戶端連接器(Client Connectors):提供與MySQL伺服器建立的支援。目前幾乎支援所有主流的服務端程式設計技術,例如常見的Java、C、Python、.NET等,它們透過各自API技術與MySQL建立連線
二、服務層(MySQL Server)
服務層是MySQL Server的核心,主要包含系統管理與控制工具、連線池、SQL介面、解析器、查詢最佳化器和快取六個部分。
連接池(Connection Pool):負責儲存和管理客戶端與資料庫的連接,一個執行緒負責管理一個連接。
系統管理與控制工具(Management Services & Utilities):例如備份還原、安全管理、叢集管理等
SQL介面(SQL Interface):用於接受客戶端傳送的各種SQL命令,並且傳回使用者需要查詢的結果。例如DML、DDL、預存程序、視圖、觸發器等。
解析器(Parser):負責將請求的SQL解析產生一個"解析樹"。然後根據一些MySQL規則進一步 檢查解析樹是否合法。
查詢優化器(Optimizer):當「解析樹」通過解析器語法檢查後,將交由優化器將其轉換成執行計 劃,然後與儲存引擎互動。
select uid,name from user where gender=1;
選取–》投影–》連接策略
1)select先根據where語句進行選取,並不是查詢出全部資料再過濾
2)select查詢根據uid和name進行屬性投影,並不是取出所有欄位
3)將前面選取和投影聯接上最終產生查詢結果
快取(Cache&Buffer): 快取機制是由一系列小型快取組成的。例如表格緩存,記錄緩存,權限緩 存,引擎緩存等。如果查詢快取有命中的查詢結果,查詢語句就可以直接去查詢快取中取資料。
三、儲存引擎層(Pluggable Storage Engines)
#儲存引擎負責MySQL中資料的儲存與擷取,與底層系統檔案互動。 MySQL儲存引擎是插件式的, 伺服器中的查詢執行引擎透過介面與儲存引擎進行通信,介面屏蔽了不同儲存引擎之間的差異 。現在有 多種儲存引擎,各有各的特點,最常見的是MyISAM和InnoDB。
四、系統檔案層(File System)
此層負責將資料庫的資料和日誌儲存在檔案系統之上,並完成與儲存引擎的交互,是檔案的實體儲存層。主要包含日誌文件,數據文件,配置文件,pid 文件,socket 文件等。
日誌檔
錯誤日誌(Error log)
#預設開啟,show variables like '%log_error%'
通用查詢日誌( General query log)
記錄一般查詢語句,show variables like '%general%';
二進位日誌(binary log)
記錄了對MySQL資料庫執行的更改操作,並且記錄了語句的發生時間、執行時長;但是它不會記錄select、show等不修改資料庫的SQL。主要用於資料庫復原和主從複製。
show variables like '%log_bin%'; //是否開啟
show variables like '%binlog%'; //參數檢視
##show binary logs;//查看日誌檔案慢查詢日誌(Slow query log)記錄所有執行時間逾時的查詢SQL,預設為10秒。 show variables like '%slow_query%'; //是否開啟show variables like '%long_query_time%'; //時長#設定檔用於存放MySQL所有的設定資訊文件,例如my.cnf、my.ini等。 資料檔db.opt 檔案:記錄這個函式庫的預設使用的字元集和校驗規則。 frm 檔案:儲存與表格相關的元資料(meta)訊息,包括表格結構的定義資訊等,每一張表都會 有一個frm 檔案。 MYD 檔案:MyISAM 儲存引擎專用,存放 MyISAM 表的資料(data),每一張表都會有一個 .MYD 檔案。 MYI 檔案:MyISAM 儲存引擎專用,存放 MyISAM 表的索引相關信息,每一張 MyISAM 表對 應一個 .MYI 檔案。 ibd檔案和 IBDATA 檔案:存放 InnoDB 的資料檔案(包括索引)。 InnoDB 儲存引擎有兩種 表空間方式:獨享表空間和共用表空間。獨享表空間使用 .ibd 檔案來存放數據,且每一張 InnoDB 表對應一個 .ibd 檔案。共享表空間使用 .ibdata 文件,所有表共同使用一個(或多 個,自行配置).ibdata 文件。 ibdata1 文件:系統表空間資料文件,儲存表元資料、Undo日誌等 。 ib_logfile0、ib_logfile1 檔案:Redo log 日誌檔。 pid 檔案pid 檔案是 mysqld 應用程式在 Unix/Linux 環境下的一個進程文件,和許多其他 Unix/Linux 服務端程式一樣,它存放著自己的進程 id。
socket 檔案
socket 檔案也是在Unix/Linux 環境下才有的,使用者在Unix/Linux 環境下客戶端連線可以不透過TCP/IP 網路直接使用Unix Socket 來連接MySQL。
InnoDB和MyISAM
交易和外鍵
InnoDB支援交易和外鍵,具有安全性和完整性,適合大量insert或update操作
MyISAM不支援交易和外鍵,它提供高速儲存和檢索,適合大量的select查詢操作
鎖定機制
#InnoDB支援行級鎖定,鎖定指定記錄。基於索引來加鎖實作。
MyISAM支援表級鎖,鎖定整張表。
索引結構
InnoDB使用聚集索引(叢集索引),索引和記錄在一起存儲,既快取索引,也快取記錄。
MyISAM使用非聚集索引(非叢集索引),索引和記錄分開。
並發處理能力
MyISAM使用表鎖,會導致寫入操作並發率低,讀取之間不會阻塞,讀寫阻塞。
InnoDB讀寫阻塞可以與隔離等級有關,可以採用多版本並發控制(MVCC)來支援高並發
儲存檔案
InnoDB表對應兩個文件,一個.frm表結構文件,一個.ibd資料檔。 InnoDB表最大支援64TB;
MyISAM表對應三個文件,一個.frm表結構文件,一個MYD表資料文件,一個.MYI索引文件。從 MySQL5.0開始預設限制是256TB。
Redo Log和Binlog區別
Redo Log是屬於InnoDB引擎功能,Binlog是屬於MySQL Server自帶功能,並且是以二進位 檔案記錄。
Redo Log屬於實體日誌,記錄此資料頁更新狀態內容,Binlog是邏輯日誌,記錄更新過程。
Redo Log日誌是循環寫,日誌空間大小是固定,Binlog是追加寫入,寫完一個寫下一個,不 會覆蓋使用。
Redo Log作為伺服器異常宕機後事務資料自動恢復使用,Binlog可以作為主從複製和資料。 Binlog沒有自動crash-safe能力。
在應用程式中可以在從庫追加多個索引來最佳化查詢,主庫這些索引可以不加,用於提升寫入效率。
讀寫分離方案
1寫後立刻讀取
在寫入資料庫後,某個時間段內讀操作就去主庫,之後讀取操作存取從庫。
2二次查詢
先去從庫讀取數據,找不到時就去主庫進行數據讀取。此操作容易將讀取壓力回饋給主庫,為了避免 惡意攻擊,建議對資料庫存取API操作進行封裝,有利於安全性和低耦合。
3根據業務特殊處理
根據業務特性和重要性進行調整,例如重要的,即時性要求高的業務資料讀寫可以放在主庫。對 於次要的業務,即時性要求不高可以進行讀寫分離,查詢時去從庫查詢。
相關推薦:《mysql教學》
###以上是詳細介紹mysql理論與基礎知識的詳細內容。更多資訊請關注PHP中文網其他相關文章!

MySQL索引基数对查询性能有显著影响:1.高基数索引能更有效地缩小数据范围,提高查询效率;2.低基数索引可能导致全表扫描,降低查询性能;3.在联合索引中,应将高基数列放在前面以优化查询。

MySQL學習路徑包括基礎知識、核心概念、使用示例和優化技巧。 1)了解表、行、列、SQL查詢等基礎概念。 2)學習MySQL的定義、工作原理和優勢。 3)掌握基本CRUD操作和高級用法,如索引和存儲過程。 4)熟悉常見錯誤調試和性能優化建議,如合理使用索引和優化查詢。通過這些步驟,你將全面掌握MySQL的使用和優化。

MySQL在現實世界的應用包括基礎數據庫設計和復雜查詢優化。 1)基本用法:用於存儲和管理用戶數據,如插入、查詢、更新和刪除用戶信息。 2)高級用法:處理複雜業務邏輯,如電子商務平台的訂單和庫存管理。 3)性能優化:通過合理使用索引、分區表和查詢緩存來提升性能。

MySQL中的SQL命令可以分為DDL、DML、DQL、DCL等類別,用於創建、修改、刪除數據庫和表,插入、更新、刪除數據,以及執行複雜的查詢操作。 1.基本用法包括CREATETABLE創建表、INSERTINTO插入數據和SELECT查詢數據。 2.高級用法涉及JOIN進行表聯接、子查詢和GROUPBY進行數據聚合。 3.常見錯誤如語法錯誤、數據類型不匹配和權限問題可以通過語法檢查、數據類型轉換和權限管理來調試。 4.性能優化建議包括使用索引、避免全表掃描、優化JOIN操作和使用事務來保證數據一致性

InnoDB通過undolog實現原子性,通過鎖機制和MVCC實現一致性和隔離性,通過redolog實現持久性。 1)原子性:使用undolog記錄原始數據,確保事務可回滾。 2)一致性:通過行級鎖和MVCC確保數據一致。 3)隔離性:支持多種隔離級別,默認使用REPEATABLEREAD。 4)持久性:使用redolog記錄修改,確保數據持久保存。

MySQL在數據庫和編程中的地位非常重要,它是一個開源的關係型數據庫管理系統,廣泛應用於各種應用場景。 1)MySQL提供高效的數據存儲、組織和檢索功能,支持Web、移動和企業級系統。 2)它使用客戶端-服務器架構,支持多種存儲引擎和索引優化。 3)基本用法包括創建表和插入數據,高級用法涉及多表JOIN和復雜查詢。 4)常見問題如SQL語法錯誤和性能問題可以通過EXPLAIN命令和慢查詢日誌調試。 5)性能優化方法包括合理使用索引、優化查詢和使用緩存,最佳實踐包括使用事務和PreparedStatemen

MySQL適合小型和大型企業。 1)小型企業可使用MySQL進行基本數據管理,如存儲客戶信息。 2)大型企業可利用MySQL處理海量數據和復雜業務邏輯,優化查詢性能和事務處理。

InnoDB通過Next-KeyLocking機制有效防止幻讀。 1)Next-KeyLocking結合行鎖和間隙鎖,鎖定記錄及其間隙,防止新記錄插入。 2)在實際應用中,通過優化查詢和調整隔離級別,可以減少鎖競爭,提高並發性能。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

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

Atom編輯器mac版下載
最受歡迎的的開源編輯器

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

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

禪工作室 13.0.1
強大的PHP整合開發環境