目錄
1、MySQL版本-- 》5版本
1.1、InnoDB存儲引擎
1.2、存儲過程和觸發器
1.3、視圖
1.4、增強的查詢優化器
1.5、增強的索引支持
1.6、外鍵支持
1.7、分區表和分布式查詢
2、MySQL版本-- 》8版本
2.1、性能
2.2、字符編碼改變
2.3、持久化保存
2.4、隱藏索引和降序索引
3、MySQL 5和MySQL 8的區別
3.1、JSON支持:
3.2、插件化架構:
3.3、性能提升
3.4、安全增強
3.5、支持的SQL語法
3.6、Unicode支持
3.7、索引算法改進
4、配置及兼容性
4.1、驅動與連接配置
4.2、移除特性
總結
前言
????????MySQL是一款開源、免費、快速穩定的關系型數據庫,被廣泛地應用在大量的Web應用程序中。
當執行一條sql的時候,會經過以下流程:
關于兩個不同版本的區別,可參考如下:
1、MySQL版本-- 》5版本
發布于2005年。
以下是MySQL 5的一些主要特點和功能:
1.1、InnoDB存儲引擎
????????MySQL 5引入了InnoDB存儲引擎作為默認的事務引擎,提供了ACID(原子性、一致性、隔離性和持久性)事務支持,以及行級鎖定和多版本并發控制(MVCC)等高級特性。
1.2、存儲過程和觸發器
????????MySQL 5引入了存儲過程和觸發器的支持,使得可以在數據庫中使用更復雜的業務邏輯和數據處理操作。
1.3、視圖
????????MySQL 5引入了視圖的支持,允許用戶創建虛擬表,從而簡化查詢和數據訪問。
1.4、增強的查詢優化器
????????MySQL 5對查詢優化器進行了改進,提供了更好的查詢執行計劃生成和查詢性能。
1.5、增強的索引支持
????????MySQL 5引入了更多類型的索引,包括全文索引、B-Tree索引和哈希索引,以提高查詢效率。
1.6、外鍵支持
????????MySQL 5開始支持外鍵約束,使得在多表關聯查詢和數據完整性方面更加靈活和方便。
1.7、分區表和分布式查詢
????????MySQL 5引入了分區表的支持,可以將大型表分割成若干個子表,以提高查詢和維護的效率。此外,MySQL 5還引入了分布式查詢的功能,允許在多個MySQL實例之間進行查詢操作。
注意:?MySQL 5是一個大版本,如MySQL 5.0、MySQL 5.1、MySQL 5.5等。每個小版本都對功能和性能進行了不同程度的改進和優化。
2、MySQL版本-- 》8版本
? ? ? ? MySQL 8于2018年發布,引入了眾多新功能和改進,以提供更高性能、更強安全性和更豐富的功能。
2.1、性能
????????MySQL 8 采用了新版InnoDB存儲引擎,具有更好的性能表現。官方表示MySql 8.0的速度要比MySql5.7快2倍,特別是在高并發與大數據的環境下,其性能迅速提升,支持高級功能如JSON、空間索引和全文索引,從而可以提供更好的查詢體驗。
InnoDB 引擎在 8.x 中默認啟用 多線程日志刷盤 和 動態緩沖池調整,顯著提升寫入性能。
2.2、字符編碼改變
????????從MYSQL8.0開始,使用utfmb4作來MySQL的默認字符集,并支持Unicode 9 ,默認字符集將從 latin1 改為 utf8mb4,默認定序將從latin1_swedish_ci 改為 utf8mb4_800_ci_ai;
????????支持存儲更廣泛的Unicode字符,包括表情符號和特殊字符等。
2.3、持久化保存
????????MySQL8.0 新增 SET PERSIST 的命令,該命令的配置值保存到數據目錄下的mysqld-auto.cnf文件中,待重啟后,讀取該文件,用其中的配置覆蓋缺省的配置文件,補充了SET?GLOBAL?命令只能臨時生效的不足;
2.4、隱藏索引和降序索引
????????可以將索引通過命令設置未隱藏或顯示。對于被隱藏的索引,它不會被查詢優化器所使用,我們可以使用這一功能,對相關的查詢進行性能調試,通過 隱藏 或 顯示,分析數據庫性能差異的原因,同時也可以去除無效的索引。
1:通過
"ALTER INDEX ... INVISIBLE"
可臨時禁用索引進行性能調試。2:?降序索引 優化了?
"ORDER BY ... DESC"
查詢的效率。
-- 降序索引
CREATE INDEX idx_salary_desc ON employees (salary DESC);-- 隱藏索引(可用于測試索引效果)
ALTER TABLE employees ALTER INDEX idx_name INVISIBLE;
3、MySQL 5和MySQL 8的區別
以下是MySQL 5和MySQL 8之間的一些主要區別:
3.1、JSON支持:
????????MySQL 5對JSON支持較弱,只能存儲和查詢JSON字符串,而MySQL 8引入了更強大的JSON功能,包括對JSON文檔的索引和查詢功能。
????????MySQL 8 提供 原生 JSON 數據類型 和豐富的操作函數(如 “JSON_EXTRACT”、“JSON_SET”),支持索引加速查詢。
如下圖所示:
-- MySQL 5:需手動解析字符串
SELECT * FROM users WHERE JSON_UNQUOTE(JSON_EXTRACT(profile, '$.age')) > 30;-- MySQL 8:直接使用路徑查詢
SELECT * FROM users WHERE profile->"$.age" > 30;
-- MySQL 8.0 JSON示例
CREATE TABLE products (id INT PRIMARY KEY,details JSON
);INSERT INTO products VALUES
(1, '{"name": "Laptop", "specs": {"cpu": "i7", "ram": "16GB"}}');SELECT id,details->>"$.name" as product_name,details->>"$.specs.cpu" as cpu
FROM products;
3.2、插件化架構:
????????MySQL 8引入了插件式存儲引擎架構,使得用戶可以根據具體需求選擇不同的存儲引擎,比如InnoDB、MyISAM等。而MySQL 5則相對較為有限,大多數情況下使用的是InnoDB引擎。
3.3、性能提升
MySQL 8在性能方面進行了許多改進,包括更好的查詢優化器、索引算法的改進、并行查詢等,從而提供更高的查詢速度和吞吐量。
3.4、安全增強
????????MySQL 8引入了許多安全增強功能,如更加嚴格的密碼策略、默認啟用的SSL/TLS支持、資源組和權限控制的增強等,以提供更高的數據安全性。
3.5、支持的SQL語法
????????MySQL 8增加了對一些新的SQL語法的支持,如窗口函數和CTE(公共表達式,即WITH語句),使得復雜查詢更加方便和靈活。
-- MySQL 8.0窗口函數示例
SELECT employee_name,department,salary,RANK() OVER (PARTITION BY department ORDER BY salary DESC) as dept_rank
FROM employees;
-- MySQL 8.0 CTE示例
WITH dept_stats AS (SELECT department, AVG(salary) as avg_salaryFROM employeesGROUP BY department
)
SELECT * FROM dept_stats WHERE avg_salary > 5000;
3.6、Unicode支持
????????MySQL 8默認使用utf8mb4字符集,支持存儲更廣泛的Unicode字符,包括表情符號和特殊字符等。
-- MySQL 8.0默認支持完整Unicode
CREATE TABLE users (id INT PRIMARY KEY,name VARCHAR(100) -- 默認utf8mb4,支持emoji等
);
3.7、索引算法改進
????????MySQL 8引入了更高效的索引算法(R-tree和B-tree索引的改進),從而提升空間數據類型和文本數據類型的查詢性能。
4、配置及兼容性
4.1、驅動與連接配置
驅動類:MySQL 5使用com.mysql.jdbc.Driver,而MySQL 8需改用com.mysql.cj.jdbc.Driver。
連接URL:MySQL 8需在JDBC URL中指定時區參數(如?serverTimezone=UTC),否則可能報錯
4.2、移除特性
MySQL 8.0移除了一些舊特性,如:
-
不再支持
password()
函數 -
移除了查詢緩存,可參考:Mysql中select查詢語句的執行過程_mysql查詢過程-CSDN博客
https://blog.csdn.net/weixin_50055999/article/details/148472938?spm=1011.2415.3001.5331
總結
????????MySQL 8.0相比5.0在性能、功能、安全性和SQL標準兼容性方面都有顯著提升,特別是窗口函數、CTE和JSON支持使得復雜查詢和半結構化數據處理更加方便。
參考文章:
1、數據庫系列---mysql5和8的區別_mysql8與mysql5區別-CSDN博客https://blog.csdn.net/weixin_42978994/article/details/133676940?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522691a7d4f3f5f160a593559052b73019e%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=691a7d4f3f5f160a593559052b73019e&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-133676940-null-null.142^v102^pc_search_result_base1&utm_term=mysql8%E5%92%8Cmysql5%E7%9A%84%E5%8C%BA%E5%88%AB&spm=1018.2226.3001.4187
2、MySQL 5和MySQL 8的區別_mysql5-CSDN博客https://blog.csdn.net/weixin_72610956/article/details/133795411?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522691a7d4f3f5f160a593559052b73019e%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=691a7d4f3f5f160a593559052b73019e&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-133795411-null-null.142^v102^pc_search_result_base1&utm_term=mysql8%E5%92%8Cmysql5%E7%9A%84%E5%8C%BA%E5%88%AB&spm=1018.2226.3001.4187