對於MySQL的歷史,相信很多人早已耳熟能詳,這裡就不要贅述。以下僅從產品特性的角度來整理其發展過程中的里程碑事件。
推薦:《mysql影片教學》
1995年,MySQL 1.0發布,僅供內部使用。
1996年,MySQL 3.11.1發布,直接跳過了MySQL 2.x版本。
1999年,MySQL AB公司成立。同年,發布MySQL 3.23,該版本整合了Berkeley DB儲存引擎。該引擎由Sleepycat公司開發,支援事務。在整合此引擎的過程中,對原始碼進行了改造,為後續可插拔式儲存引擎架構奠定了基礎。
2000年,ISAM升級為MyISAM儲存引擎。同年,MySQL基於GPL協定開放原始碼。
2002年,MySQL 4.0發布,整合了後來大名鼎鼎的InnoDB儲存引擎。該引擎由Innobase公司開發,支援事務,支援行級鎖,適用於OLTP等高並發場景。
2005年,MySQL 5.0發布,開始支援遊標,預存程序,觸發器,視圖,XA事務等功能。同年,Oracle收購Innobase公司。
2008年,Sun以10億美金收購MySQL AB。同年,發布MySQL 5.1,其開始支援定時器(Event scheduler),分區,基於行的複製等特性。
2009年,Oracle以74億美金收購Sun公司。
2010年,MySQL 5.5發布,其包含以下重要功能及更新。
● InnoDB取代MyISAM成為MySQL預設的儲存引擎。
● 多核心擴展,能更充分地使用多核心CPU。
● InnoDB的效能提升,包括支援索引的快速創建,表壓縮,I/O子系統的效能提升,PURGE操作從主執行緒中剝離出來,Buffer Pool可拆分為多個Instances。
● 半同步複製。
● 引入utf8mb4字元集,可用來儲存emoji表情。
● 引入metadata locks(元資料鎖)。
● 分區表的增強,新增兩個分區類型:RANGE COLUMNS和LIST COLUMNS。
● MySQL企業版引入執行緒池。
● 可設定IO讀寫執行緒的數量(innodb_read_io_threads,innodb_write_io_threads)。在此之前,其數量為1,且不可配置。
● 引入innodb_io_capacity選項,用於控制髒頁刷新的數量。
2013年,MySQL 5.6發布,其包含以下重要功能及更新。
● GTID複製。
● 無損複製。
● 延遲複製。
● 基於庫層級的平行複製。
● mysqlbinlog可遠端備份binlog。
● 對TIME, DATETIME和TIMESTAMP進行了重構,可支援小數秒。 DATETIME的空間需求也從之前的8個位元組減少到5個位元組。
● Online DDL。 ALTER操作不再阻塞DML。
● 可傳輸表空間(transportable tablespaces)。
● 統計資訊的持久化。避免主從之間或資料庫重新啟動後,同一個SQL的執行計劃有差異。
● 全文索引。
● InnoDB Memcached plugin。
● EXPLAIN可用來查看DELETE,INSERT,REPLACE,UPDATE等DML作業的執行計劃,在此之前,只支援SELECT作業。
● 分區表的增強,包括最大可用分區數增加至8192,支援分區和非分區表之間的資料交換,操作時明確指定分區。
● Redo Log總大小的限制從先前的4G擴展至512G。
● Undo Log可保存在獨立表空間中,因其是隨機IO,更適合放到SSD中。但仍不支援空間的自動回收。
● 可dump與load Buffer pool的狀態,避免資料庫重新啟動後需要較長的預熱時間。
● InnoDB內部的效能提升,包括分割kernel mutex,引入獨立的刷新線程,可設定多個purge線程。
● 優化器效能提升,引入了ICP,MRR,BKA等特性,針對子查詢進行了最佳化。
可以說,MySQL 5.6是MySQL史上一個里程碑式的版本,這也是目前生產上應用得最廣泛的版本。
2015年,MySQL 5.7發布,其包含以下重要功能及更新。
● 群組複製
● InnoDB Cluster
● 多重來源複製
● 增強半同步(AFTER_SYNC)
● 基於WRITESET的並行複製。
● 線上開啟GTID複製。
● 線上設定複製過濾規則。
● 在線上修改Buffer pool的大小。
● 在同一長度編碼位元組內,修改VARCHAR的大小只需修改表的元數據,無需建立臨時表。
● 可設定NUMA架構的記憶體分配策略(innodb_numa_interleave)。
● 透明頁壓縮(Transparent Page Compression)。
● UNDO表空間的自動回收。
● 查詢最佳化器的重構與增強。
● 可查看目前正在執行的SQL的執行計畫(EXPLAIN FOR CONNECTION)。
● 引入了查詢改寫插件(Query Rewrite Plugin),可在服務端對查詢進行改寫。
● EXPLAIN FORMAT=JSON會顯示成本訊息,這樣可直觀的比較兩種執行計畫的優劣。
● 引入了虛擬列,類似Oracle中的函數索引。
● 新執行個體不再預設建立test資料庫及匿名使用者。
● 引入ALTER USER指令,可用來修改使用者密碼,密碼的過期策略,及鎖定使用者等。
● mysql.user表中儲存密碼的欄位從password修改為authentication_string。
● 表空間加密。
● 優化了Performance Schema,其記憶體使用減少。
● Performance Schema引入了眾多instrumentation。常用的有Memory usage instrumentation,可用來查看MySQL的記憶體使用情況,Metadata Locking Instrumentation,可用來查看MDL的持有情況,Stage Progress instrumentation,可用來查看Online DDL的進度。
● 相同觸發事件(INSERT,DELETE,UPDATE),相同觸發時間(BEFORE,AFTER),允許建立多個觸發器。在此之前,只允許建立一個觸發器。
● InnoDB原生支援分區表,在此之前,是透過ha_partition介面來實現的。
● 分區表支援可傳輸表空間特性。
● 整合了SYS資料庫,簡化了MySQL的管理及異常問題的定位。
● 原生支援JSON類型,並引入了眾多JSON函數。
● 引入了新的邏輯備份工具-mysqlpump,支援表格層級的多執行緒備份。
● 引進了新的客戶端工具-mysqlsh,其支援三種語言:JavaScript, Python and SQL。兩種API:X DevAPI,AdminAPI,其中,前者可將MySQL作為文件型資料庫進行操作,後者用於管理InnoDB Cluster。
● mysql_install_db被mysqld --initialize代替,用來進行實例的初始化。
● 原生支援systemd。
● 引入了super_read_only選項。
● 可設定SELECT操作的逾時時長(max_execution_time)。
● 可透過SHUTDOWN指令關閉MySQL實例。
● 引入了innodb_deadlock_detect選項,在高並發場景下,可使用此選項來關閉死鎖偵測。
● 引入了Optimizer Hints,可在語句層級控制最佳化器的行為,如是否開啟ICP,MRR等,在此之前,只有Index Hints。
● GIS的增強,包括使用Boost.Geometry取代先前的GIS演算法,InnoDB開始支援空間索引。
2018年,MySQL 8.0發布,其包含以下重要功能及更新。
● 引入了原生的,基於InnoDB的資料字典。資料字典表位於mysql函式庫中,對使用者不可見,同mysql函式庫的其它系統表一樣,保存在資料目錄下的mysql.ibd檔中。不再置於mysql目錄下。
● Atomic DDL。
● 重構了INFORMATION_SCHEMA,其中,部分錶已重構為基於資料字典的視圖,在此之前,其為臨時表。
● PERFORMANCE_SCHEMA查詢效能提升,其已內建多個索引。
● 不可見索引(Invisible index)。
● 降序索引。
● 直方圖。
● 公用表表達式(Common table expressions)。
● 視窗函數(Window functions)。
● 角色(Role)。
● 資源組(Resource Groups),可用來控制執行緒的優先權及其能使用的資源,目前,能被管理的資源只有CPU。
● 引入了innodb_dedicated_server選項,可基於伺服器的記憶體來動態設定innodb_buffer_pool_size,innodb_log_file_size和innodb_flush_method。
● 快速加列(ALGORITHM=INSTANT)。
● JSON欄位的部分更新(JSON Partial Updates)。
● 自增主鍵的持久化。
● 可持久化全域變數(SET PERSIST)。
● 預設字元集由latin1修改為utf8mb4。
● 預設開啟UNDO表空間,且支援線上調整數量(innodb_undo_tablespaces)。在MySQL 5.7中,預設不開啟,若要開啟,只能初始化時設定。
● 備份鎖定。
● Redo Log的最佳化,包含允許多個使用者執行緒並發寫入log buffer,可動態修改innodb_log_buffer_size的大小。
● 預設的認證外掛程式由mysql_native_password改為caching_sha2_password。
● 預設的記憶體臨時表由MEMORY引擎變更為TempTable引擎,相較於前者,後者支援以變長方式儲存VARCHAR,VARBINARY等變長欄位。從MySQL 8.0.13開始,TempTable引擎支援BLOB欄位。
● Grant不再隱式創建使用者。
● SELECT ... FOR SHARE和SELECT ... FOR UPDATE語句中引入NOWAIT和SKIP LOCKED選項,解決電商場景熱點行問題。
● 正規表示式的增強,新增了4個相關函數,REGEXP_INSTR(),REGEXP_LIKE(),REGEXP_REPLACE(),REGEXP_SUBSTR()。
● 查詢最佳化器在製定執行計畫時,會考慮資料是否在Buffer Pool中。而在此之前,是假設資料都在磁碟中。
● ha_partition介面從程式碼層移除,如果要使用分區表,只能使用InnoDB儲存引擎。
● 引入了更多細微的權限來取代SUPER權限,現在授予SUPER權限會提示warning。
● GROUP BY語句不再隱含排序。
● MySQL 5.7引入的表空間加密特性可對Redo Log和Undo Log進行加密。
● information_schema中的innodb_locks和innodb_lock_waits表被移除,取代的是performance_schema中的data_locks和data_lock_waits表。
● 引入performance_schema.variables_info表,記錄了參數的來源及修改情況。
● 增加了對於客戶端報錯資訊的統計(performance_schema.events_errors_summary_xxx)。
● 可統計查詢的回應時間分佈(call sys.ps_statement_avg_latency_histogram())。
● 支援直接修改列名(ALTER TABLE ... RENAME COLUMN old_name TO new_name)。
● 使用者密碼可設定重試原則(Reuse Policy)。
● 移除PASSWORD()函數。這就表示無法透過「SET PASSWORD ... = PASSWORD('auth_string') 」指令修改使用者密碼。
● 程式碼層移除Query Cache模組,故Query Cache相關的變數與運算皆不再支援。
● BLOB, TEXT, GEOMETRY和JSON欄位允許設定預設值。
● 可透過RESTART指令重啟MySQL實例。
要注意的是,上述的發布,一般指的是GA版本。
最後,看看下面這個表格,表中給出了最近幾個大版本的發佈時間,及截止到本書出版,其最新的小版本及其發佈時間。
https://en.wikipedia.org/wiki/MySQL#Release_history
從表格中的資料來看,
1. 大概每3年會發布一個大的版本。
2. 產品的支援週期一般是8年。
3. 以為MySQL 5.5是老古董了,但官方仍在不斷更新。
原文網址:https://www.cnblogs.com/ivictor/p/9807284.html
以上是看看MySQL 5.6, 5.7, 8.0的新功能!的詳細內容。更多資訊請關注PHP中文網其他相關文章!

MySQL使用的是GPL許可證。 1)GPL許可證允許自由使用、修改和分發MySQL,但修改後的分發需遵循GPL。 2)商業許可證可避免公開修改,適合需要保密的商業應用。

選擇InnoDB而不是MyISAM的情況包括:1)需要事務支持,2)高並發環境,3)需要高數據一致性;反之,選擇MyISAM的情況包括:1)主要是讀操作,2)不需要事務支持。 InnoDB適合需要高數據一致性和事務處理的應用,如電商平台,而MyISAM適合讀密集型且無需事務的應用,如博客系統。

在MySQL中,外鍵的作用是建立表與表之間的關係,確保數據的一致性和完整性。外鍵通過引用完整性檢查和級聯操作維護數據的有效性,使用時需注意性能優化和避免常見錯誤。

MySQL中有四種主要的索引類型:B-Tree索引、哈希索引、全文索引和空間索引。 1.B-Tree索引適用於範圍查詢、排序和分組,適合在employees表的name列上創建。 2.哈希索引適用於等值查詢,適合在MEMORY存儲引擎的hash_table表的id列上創建。 3.全文索引用於文本搜索,適合在articles表的content列上創建。 4.空間索引用於地理空間查詢,適合在locations表的geom列上創建。

toCreateAnIndexinMysql,usethecReateIndexStatement.1)forasingLecolumn,使用“ createIndexIdx_lastNameEnemployees(lastName); 2)foracompositeIndex,使用“ createIndexIndexIndexIndexIndexDx_nameOmplayees(lastName,firstName,firstName);” 3)forauniqe instex,creationexexexexex,

MySQL和SQLite的主要區別在於設計理念和使用場景:1.MySQL適用於大型應用和企業級解決方案,支持高性能和高並發;2.SQLite適合移動應用和桌面軟件,輕量級且易於嵌入。

MySQL中的索引是數據庫表中一列或多列的有序結構,用於加速數據檢索。 1)索引通過減少掃描數據量提升查詢速度。 2)B-Tree索引利用平衡樹結構,適合範圍查詢和排序。 3)創建索引使用CREATEINDEX語句,如CREATEINDEXidx_customer_idONorders(customer_id)。 4)複合索引可優化多列查詢,如CREATEINDEXidx_customer_orderONorders(customer_id,order_date)。 5)使用EXPLAIN分析查詢計劃,避

在MySQL中使用事務可以確保數據一致性。 1)通過STARTTRANSACTION開始事務,執行SQL操作後用COMMIT提交或ROLLBACK回滾。 2)使用SAVEPOINT可以設置保存點,允許部分回滾。 3)性能優化建議包括縮短事務時間、避免大規模查詢和合理使用隔離級別。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

WebStorm Mac版
好用的JavaScript開發工具

Dreamweaver CS6
視覺化網頁開發工具

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

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

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