文章轉發自專業的Laravel開發者社區,原始連接:learnku.com/laravel/t/1…html
下面將以 MySQL 社區的優先級從高到低來展現這些功能:mysql
這是 MySQL 8.0 中最受期待和最受歡迎的特性 ... 同時他很是容易理解。laravel
我對 MySQL 文檔存儲很是興奮,我在全球各地展現他快一年的時間,並收到了不少好的反饋。 爲何 MySQL DS 如此優秀? 由於使用一種解決方案你能夠處理 SQL 和 NoSQL。你也能夠將兩種語言的優點結合起來。 你能夠對相同數據執行 CRUD 命令,同時你也能夠在 SQL 中執行如鏈接多個表及 and/or 集合這種更復雜的查詢。正則表達式
同時後端是衆所周知強大的 InnoDB 引擎, MySQL 文檔存儲引擎徹底符合 ACID 標準。 由於他都在 MySQL 內部,因此你能夠從你熟悉的內容中收益,亦能夠將其轉換到文檔存儲: replication, performance_schema, ...sql
使用 MySQL 8.0, 咱們固然關注現代 Web 應用... 這是指移動端! 當咱們提到手機端, 也是表情符號和大量的須要共存的字符集和歸類。數據庫
這就是爲何咱們決定將默認的字符集從 latin-1 轉爲 utf8mb4。 MySQL支持最新的 Unicode 9.0 基於 DUCET 的新分類, 重音和大小寫敏感的歸類,日語,俄語,...json
MySQL 帶來了一些新的 JSON 相關變動:後端
->>
表達式,做用等於 JSON_UNQUOTE(JSON_EXTRACT())
JSON_ARRAYAGG()
和 JSON_OBJECTAGG()
JSON_PRETTY()
JSON_STORAGE_SIZE()
, JSON_STORAGE_FREE()
MySQL 8.0 中 JSON 最重要的優化之一,是提供了一個 JSON_TABLE()
函數。此函數接受 JSON 格式的數據,而後將其轉化爲關係型數據表。字段和數據的格式均可以被指定。你也能夠對 JSON_TABLE()
之後的數據使用正常的 SQL 查詢,如 JOINS, 聚合查詢等, ... 你能夠查閱 @stoker 的博文 ,固然你也能夠閱讀 官方文檔 。緩存
須要注意的是,這不只僅影響到開發者的使用,MySQL 的執行性能也會受到影響。在老系統中,更新 JSON 時系統會刪除老數據並寫入新的數據,在新系統中,若是你要更新 JSON 數據裏的某個字段,正確的作法是直接對 JSON 裏的某個字段進行更新,這樣執行效率更佳,而且數據庫主從複製(Replication)性能也會受益。服務器
MySQL 8.0 新增了 CTEs 功能(譯者注:Common Table Expresssions 公共表格表達式)。CTE 是一個命名的臨時結果集,僅在單個 SQL 語句的執行範圍內存在,能夠是自引用,也能夠在同一查詢中屢次引用。
針對查詢中的每一行,一個統計分析方法使用該行關聯的行執行計算。 這就像 GROUP BY 方法但他是保留行而不是摺疊他們。
如下是 MySQL 8.0.4 當前實現的統計分析方法列表:
名稱 | 描述 |
---|---|
CUME_DIST() |
累計分配值 |
DENSE_RANK() |
當前行在分區的排名, 沒有間隔 |
FIRST_VALUE() |
窗口框架第一行的參數值 |
LAG() |
分區中指定行落後於當前行的參數值 |
LAST_VALUE() |
窗口框架第一行的參數值 |
LEAD() |
分區中引導當前行的參數值 |
NTH_VALUE() |
從第N行窗口框架的參數值 |
NTILE() |
分區中當前行的桶號 |
PERCENT_RANK() |
百分比等級值 |
RANK() |
當前行在分區中的排名,含間隔 |
ROW_NUMBER() |
其分區中的當前行數 |
在 MySQL 8.0 以前, 當在索引定義中使用 DESC 時該標誌將被忽略。 如今再也不是這樣了! 如今鍵值按降序存儲。之前, 索引可能被按相反順序掃描,但性能會受到影響。能夠按順序掃描倒序索引,這將更高效。
新的優化器開銷模型(Optimizer Cost Model)如今會計算內存緩存數據和硬盤數據。推薦閱讀 Øystein 的博客文章.
你能夠利用此特性來擴展 MySQL 服務器的功能,這將會比插件更加容易開發和維護,推薦閱讀 官方文檔。
MySQL 8.0 對 GIS(譯者注:Geographic Information System 地理信息系統) 的支持有很是高的提高,功能上直追 PostgreSQL。
一些例子:
MySQL 8.0 的 InnoDB 引擎如今能夠更好的處理熱行爭搶。 InnoDB 支持 NOWAIT
和 SKIP\ LOCKED
選項與 SELECT ... FOR\ SHARE
和 SELECT ... FOR\ UPDATE
鎖定讀取語句。 NOWAIT
會在請求行被其餘事務鎖定的狀況下當即返回語句。 SKIP LOCKED
從結果集中刪除被鎖定的行。 參見 使用 NOWAIT 和 SKIP LOCKED 鎖定併發讀取.
固然好的 MySQL 8.0 特性列表不會在這裏結束, 例如 支持正則表達式 也是一個剛剛出如今 [8.0.4] 版本中的有趣的特性 (mysqlserverteam.com/the-mysql-8…)。 新的 SQL GROUPING()
功能, IPV6 和 UUID 操做新業務,更多優化器提示...
我但願這給你一個很好的概述,是什麼樣的請求在驅動 MySQL 的創新。下一篇文章將介紹應該使得開發者滿意的 MySQL 8.0 特性 ?