1. 程式人生 > >MySQL 8.0中的新增功能

MySQL 8.0中的新增功能

原文:https://mysqlserverteam.com/whats-new-in-mysql-8-0-generally-available/

我們自豪地宣佈MySQL 8.0的一般可用性。現在下載!MySQL 8.0是全球最受歡迎的開源資料庫的一個非常令人興奮的新版本,全面改進。一些關鍵的增強包括:

  1. SQL視窗函式,公用表表達式,NOWAIT和SKIP LOCKED,降序索引,分組,正則表示式,字符集,成本模型和直方圖。
  2. JSON擴充套件語法,新功能,改進排序和部分更新。使用JSON表函式,您可以使用JSON資料的SQL機制。
  3. GIS地理支援。空間參考系統(SRS),以及SRS感知空間資料型別,空間索引和空間功能。
  4. 可靠性 DDL語句已變得原子性和崩潰安全,元資料儲存在單個事務資料字典中。由InnoDB提供支援!
  5. 可觀察性效能架構,資訊架構,配置變數和錯誤記錄的顯著增強。
  6. 管理遠端管理,撤消表空間管理和新的即時DDL。
  7. 安全 OpenSSL改進,新的預設身份驗證,SQL角色,分解超級特權,密碼強度等等。
  8. 效能 InnoDB在讀/寫工作負載,IO繫結工作負載和高爭用“熱點”工作負載方面明顯更好。增加了資源組功能,通過將使用者執行緒對映到CPU,為使用者提供一個選項,以針對特定硬體上的特定工作負載進行優化

上面描述了一些亮點,我鼓勵你進一步深入到完整的系列裡程碑部落格posts-的8.0.08.0.18.0.28.0.3

8.0.4 -和甚至進一步向下個別工作日誌及其規格和實施細節。或者,您可能更願意檢視github.com/mysql上的原始碼

開發者功能

MySQL開發人員需要新功能,而MySQL 8.0在諸如SQL,JSON,正則表示式和GIS等領域提供了許多新的和更多需求的功能。開發人員也希望能夠儲存Emojis,因此UTF8MB4現在是8.0中的預設字符集。最後,資料型別得到了改進,在BINARY資料型別上進行了按位操作,並改進了IPv6和UUID功能。

SQL

視窗函式

MySQL 8.0提供了SQL視窗功能。與分組集合函式類似,視窗函式對一組行進行一些計算,例如COUNTSUM但是,如果分組聚合將這組行集合到一行中,則視窗函式將為結果集中的每一行執行聚合。

視窗函式有兩種形式:用作視窗函式和專用視窗函式的SQL聚合函式。這是MySQL中支援視窗化的集合函式集合:COUNTSUMAVGMINMAXBIT_ORBIT_ANDBIT_XORSTDDEV_POP(及其同義詞STDSTDDEV),STDDEV_SAMPVAR_POP(及其同義詞VARIANCE)和VAR_SAMP這組專門的視窗函式是:RANKDENSE_RANKPERCENT_RANKCUME_DISTNTILEROW_NUMBERFIRST_VALUELAST_VALUENTH_VALUELEADLAG

對視窗函式(又名分析函式)的支援是一種頻繁的使用者請求。視窗函式一直是標準SQL(SQL 2003)的一部分。在這裡可以看到Dag Wanvik的  部落格文章以及Guilhem Bichot 在這裡的部落格文章

公用表表達式

MySQL 8.0提供[遞迴]公用表表達式(CTE)。非遞迴CTE可以解釋為“改進的派生表”,因為它允許派生表被多次引用。遞迴CTE是一組迭代構建的行:從最初的一組行開始,一個程序派生新的行,然後將這些新的行重新輸入到程序中,產生更多的行,等等,直到該過程不再生成行。CTE是一個通常需要的SQL功能,請參閱功能請求1624432174見吉揚Bichot部落格文章在這裡這裡這裡這裡

NOWAIT和SKIP LOCKED

MySQL的8.0提供了NOWAITSKIP LOCKED該SQL鎖定子句中的替代品。通常,當某行由於某個UPDATE某一行而被鎖定時SELECT ... FOR UPDATE,任何其他事務都必須等待才能訪問該鎖定的行。在某些使用情況下,如果行被鎖定或忽略鎖定行,則需要立即返回。使用鎖定子句NOWAIT永遠不會等待獲取行鎖。相反,查詢將失敗並顯示錯誤。使用鎖定子句SKIP LOCKED永遠不會等待獲取列出的表上的行鎖。相反,鎖定的行將被跳過並且不會被讀取。NOWAIT和SKIP LOCKED是經常請求的SQL功能。請參閱功能請求49763我們也想對Kyle Oppenheim 說聲謝謝為他的程式碼貢獻!請參閱Martin Hansson 在這裡發表的博文

降序索引

MySQL 8.0按降序提供對索引的支援。這種索引中的值按降序排列,我們將其向前掃描。在8.0之前,當用戶建立降序索引時,我們建立了一個升序索引並向後掃描。一個好處是前向索引掃描比後向索引掃描快。真正的降序索引的另一個好處是,它使我們能夠使用索引而不是資料夾作為ORDER BY具有混合ASC/DESC排序關鍵部分子句降序索引是一個頻繁請求的SQL功能。請參閱功能請求13375見Chaithra Gopalareddy部落格文章  在這裡

GROUPING

MySQL 8.0提供GROUPING()SQL_FEATURE T433GROUPING()功能區分超常規行與常規分組行。GROUP BY諸如ROLLUP產生超集合行的擴充套件,其中所有值的集合由空值表示。使用該GROUPING()函式,您可以區分表示超常聚合行中所有值的集合的null與NULL常規行中的值。GROUPING是一個頻繁請求的SQL功能。請參閱功能請求315646053感謝Zoe DongShane Adams在功能請求46053中的程式碼貢獻見Chaithra Gopalareddy部落格文章 在這裡

優化器提示

在5.7中,我們為優化器提示引入了一種新的提示語法使用新的語法,可以SELECT | INSERT | REPLACE | UPDATE | DELETE在SQL語句中關鍵字之後直接指定提示,並將其用/*+ */風格註釋括起來(見這裡的Sergey Glukhov部落格文章5.7 )。在MySQL 8.0中,我們通過充分利用這種新風格來完成圖片:

  • MySQL 8.0增加了INDEX_MERGE和的提示NO_INDEX_MERGE這允許使用者在不更改優化器開關的情況下控制單個查詢的索引合併行為。
  • MySQL的8.0增加了用於提示JOIN_FIXED_ORDERJOIN_ORDERJOIN_PREFIX,和JOIN_SUFFIX這允許使用者控制聯合執行的表順序。
  • MySQL 8.0添加了一個叫做提示SET_VARSET_VAR提示將針對只剩下一語句給定的系統變數設定的值。因此,語句結束後,該值將重置為先前的值。在這裡可以看到Sergey Glukhov的部落格文章

我們更傾向於將新風格的優化器提示視為優於舊式提示和optimizer_switch設定通過不與SQL混合,新的提示可以在查詢字串中的許多地方注入。他們在提示(vs指令)方面也有更清晰的語義。

JSON

MySQL 8.0增加了新的JSON函式,並提高了排序和分組JSON值的效能。

JSON路徑表示式中的範圍的擴充套件語法

MySQL 8.0擴充套件了JSON路徑表示式中範圍的語法。例如SELECT JSON_EXTRACT('[1, 2, 3, 4, 5]', '$[1 to 3]');結果[2, 3, 4]引入的新語法是SQL標準語法的一個子集,在SQL:2016,9.39 SQL / JSON路徑語言中描述:語法和語義。參見Roland Bouman報告的Bug#79052

JSON表函式

MySQL 8.0增加了JSON表函式,可以使用JSON資料的SQL機制。建立JSON資料的關係檢視。它將JSON資料評估的結果對映到關係行和列。使用者可以使用SQL查詢函式返回的結果為常規關係表,例如join,project和aggregate。

JSON聚合函式

MySQL 8.0添加了聚合函式來生成JSON陣列並生成JSON物件。這使得將多行中的JSON文件組合成JSON陣列或JSON物件成為可能。見克特林Besleaga部落格文章在這裡

JSON合併函式

函式實現RFC7396指定的JavaScript(和其他指令碼語言)的語義,即它通過第二個文件的優先順序去除重複項。例如,JSON_MERGE('{"a":1,"b":2 }','{"a":3,"c":4 }'); # returns {"a":3,"b":2,"c":4}

例如,該函式具有在MySQL 5.7中實現的JSON_MERGE()的語義,該語法保留所有值  JSON_MERGE('{"a": 1,"b":2}','{"a":3,"c":4}'); # returns {"a":[1,3],"b":2,"c":4}.

現有的函式在MySQL 8.0中不推薦使用,以消除合併操作的歧義。請參閱Bug#81283中的提案以及Morgan Tocker 在此處的博文

JSON漂亮功能

MySQL 8.0 在MySQL中添加了一個函式。該函式接受JSON本機資料型別或JSON的字串表示形式,並以新的行和縮排方式以人類可讀的方式返回JSON格式的字串。

JSON大小函式

MySQL 8.0為給定的JSON物件添加了與空間使用相關的JSON函式。回報的JSON資料型別位元組的實際大小。返回以位元組為單位,包括分段和填充儲存就地更新一個JSON二進位制型別的自由空間。

JSON改進排序

MySQL 8.0通過使用可變長度的排序鍵為排序/分組JSON提供了更好的效能。初步的基準測試顯示,根據使用情況,分類的改進度提高了1.2至18倍。

JSON部分更新

MySQL的8.0增加了對部分更新支援以及功能。如果只更新JSON文件的某些部分,我們希望向處理程式提供有關更改內容的資訊,以便儲存引擎和複製無需編寫完整文件。在複製環境中,無法保證JSON文件的佈局在從屬裝置和主裝置上完全相同,因此物理差異無法用於減少基於行復制的網路I / O。因此,MySQL 8.0提供了邏輯差異,即基於行的複製可以通過線路傳送並在從屬裝置上重新應用。見克努特安德斯·哈特蘭的部落格文章在這裡

GIS

MySQL 8.0提供地理支援。這包括對空間參考系統(SRS)的元資料支援,以及SRS感知空間資料型別,空間索引和空間函式。簡而言之,MySQL 8.0可以理解地球表面的緯度和經度座標,例如,可以在大約5000個支援的空間參考系統中的任何一箇中正確計算地球表面上兩點之間的距離。

空間參考系統(SRS)

資訊模式檢視提供有關空間資料可用的空間參考系統的資訊。該檢視基於SQL / MM(ISO / IEC 13249-3)標準。每個空間參考系統都由一個SRID號碼標識。MySQL 8.0附帶來自EPSG大地引數資料集的大約5000個SRID ,涵蓋地理參考橢球和2d投影(即所有2D空間參考系統)。

SRID感知空間資料型別

空間資料型別可以用空間參考系統定義進行歸屬,例如SRID 4326,如下所示:CREATE TABLE t1 (g GEOMETRY SRID 4326);SRID在這裡是GEOMETRY資料型別的SQL型別修飾符。插入到具有SRID屬性的列中的值必須位於該SRID中。嘗試使用其他SRID插入值會導致引發異常情況。未修改的型別(即沒有SRID規範的型別)將繼續接受所有SRID,如前所述。

MySQL 8.0添加了INFORMATION_SCHEMA.ST_GEOMETRY_COLUMNSSQL / MM第3部分中指定檢視。19.2。這種觀點將列出所有幾何列在MySQL例項,併為每列將列出標準SRS_NAMESRS_IDGEOMETRY_TYPE_NAME

SRID感知空間索引

空間索引可以在空間資料型別上建立。空間索引中的列必須宣告為NOT NULL。例如像這樣:CREATE TABLE t1 (g GEOMETRY SRID 4326 NOT NULL, SPATIAL INDEX(g));

具有空間索引的列應該具有SRID型別修飾符,以允許優化器使用索引。如果在沒有SRID型別修飾符的列上建立空間索引,則會發出警告。

SRID感知空間功能

MySQL的8.0延伸的空間的功能,例如  ST_Distance()ST_Length()來檢測其引數是在一個地理(橢圓形)和SRS來計算對橢球的距離。到目前為止,ST_Distance和空間關係,例如ST_WithinST_IntersectsST_ContainsST_Crosses,等支援地理計算。每個ST函式的行為如SQL / MM Part 3 Spatial中所定義。

字符集

MySQL 8.0使UTF8MB4成為預設字符集。SQL效能 - 比如對UTF8MB4字串進行排序 - 與5.7相比,8.0版本的效能提高了20倍。UTF8MB4是網路中主要的字元編碼,這一舉措將使絕大多數MySQL使用者的生活更輕鬆。

  • 預設字符集已從更改latin1utf8mb4並且預設排序規則從更改latin1_swedish_ciutf8mb4_800_ci_ai
  • 預設值的更改適用於libmysql和伺服器命令工具以及伺服器本身。
  • 這些更改也反映在MTR測試中,使用新的預設字符集執行。
  • 相關推薦

    MySQL 8.0新增功能

    原文:https://mysqlserverteam.com/whats-new-in-mysql-8-0-generally-available/我們自豪地宣佈MySQL 8.0的一般可用性。現在下載!MySQL 8.0是全球最受歡迎的開源資料庫的一個非常令人興奮的新版本,

    MySQL 8.0 統計信息直方圖的嘗試

    概念 分布 分享圖片 監控 一個 圖片 zabbix 純粹 mat 直方圖是表上某個字段在按照一定百分比和規律采樣後的數據分布的一種描述,最重要的作用之一就是根據查詢條件,預估符合條件的數據量,為sql執行計劃的生成提供重要的依據在MySQL 8.0之前的版本中,My

    MySQL 8.0 統計資訊直方圖的嘗試

    直方圖是表上某個欄位在按照一定百分比和規律取樣後的資料分佈的一種描述,最重要的作用之一就是根據查詢條件,預估符合條件的資料量,為sql執行計劃的生成提供重要的依據。 在MySQL 8.0之前的版本中,MySQL僅有一個簡單的統計資訊卻沒有直方圖,沒有直方圖的統計資訊可以說是

    Mysql 8.0.11 新增檢視許可權

    mysql不同版本,給檢視新增許可權的方式不一樣。我安裝的是MySQL 8.0.11版本的,在寫8.0.11版本許可權設定的過程中,會加入其他版本的一些方案,供讀者參考: 1、首先都是登陸root使用者 這一步沒什麼區別 2、選擇資料庫 3、查詢使用者相關資訊

    牛逼!MySQL 8.0 的索引可以隱藏了…

    MySQL 8.0 雖然釋出很久了,但可能大家都停留在 5.7.x,甚至更老,其實 MySQL 8.0 新增了許多重磅新特性,比如棧長今天要介紹的 "**隱藏索引**" 或者 "**不可見索引**"。 ## 隱藏索引是什麼鬼? **隱藏索引** 字面意思就是把索引進行隱藏,即不可見,它不是用來查詢優化的,

    (譯)MySQL 8.0實驗室---MySQL的倒敘索引(Descending Indexes)

    mysql 重新 .cn 創建表 https 正序 tro 一個 刪除 譯者註:MySQL 8.0之前,不管是否指定索引建的排序方式,都會忽略創建索引時候指定的排序方式(語法上不會報錯),最終都會創建為ASC方式的索引,在執行查詢的時候,只存在forwarded(正向

    windows環境下安裝mysql 8.0.13在dos命令的安裝問題

    mysql下載地址https://dev.mysql.com/downloads/mysql/ 我下載的是最新的 本文是針對安裝中遇到的小問題進行小結: 一、配置好PATH路徑,環境變數中設定:(\bin路徑) 在PATH中新增路徑 二、進入命令列控制,記住使用管

    (譯)MySQL 8.0實驗室---MySQL的倒序索引(Descending Indexes)

    譯者注:MySQL 8.0之前,不管是否指定索引建的排序方式,都會忽略建立索引時候指定的排序方式(語法上不會報錯),最終都會建立為ASC方式的索引,在執行查詢的時候,只存在forwarded(正向)方式對索引進行掃描。關於正向索引和反向索引,邏輯上很容易理解,這裡有兩個相關的概念:正向索引或者反向(倒序)

    MySQL 8.0 新增SQL語法對視窗函式和CTE的支援

     嘗試了一下MySQL 8.0的部分新特性。   如果用過MSSQL或者是Oracle中的視窗函式(Oracle中叫分析函式),  然後再使用MySQL 8.0之前的時候,就知道需要在使用視窗函式處理邏輯的痛苦了,雖然純SQL也能實現類似於視窗函式的功能,但是這種SQL在可讀性和以及使用方式上大打折扣,

    使用axure rp 8.0的中繼器實現簡單的翻頁功能

    1.在圖形庫中找到中繼器,選中拖到工作區域,中繼器初始的格式如下:  2.為了方便後續的操作,這裡我們首先需要修改一下中繼器的格式,雙擊進入中繼器編輯頁面,選中矩形,按住ctrl+滑鼠左鍵向右移,操作兩次,操作之後的介面如下:  3.在右邊中繼器的表格中新增資料,

    Mysql 8.0 新增特性

    1. 資料字典新增了事務型的資料字典,用來儲存資料庫物件資訊之前,字典資料是儲存在元資料檔案和非事務型表中的 2. 賬號許可權管理添加了對 “角色” 的支援,角色會對應一套許可權,角色可以被新增、刪除,角色上的許可權也可以進行增刪可以對使用者賬號新增和刪除角色 3.

    mysql 8.0給資料庫新增使用者和賦權

    -- 使用mysql 資料庫 USE mysql -- 為mysql建立使用者:case_dev 密碼為:pass123 CREATE USER case_dev IDENTIFIED BY 'pass123'; -- 檢視下使用者case_dev的許可權 SELECT

    MySQL 8.0復制性能的提升(翻譯)

    行存儲 快捷 試圖 提高 需要 並發 流量 trac sla What’s New With MySQL Replication in MySQL 8.0 MySQL復制從問世到現在已經經歷了多個年頭,它的穩定性和可靠性也在穩步的提高。這是一個不停進化的過程,

    MySQL 8.0.2復制新特性(翻譯)

    ogl 防止 將不 地址 arc -- 等待 download 日誌 譯者:知數堂星耀隊 MySQL 8.0.2復制新特性 MySQL 8 正在變得原來越好,而且這也在我們MySQL復制研發團隊引起了一陣熱潮。我們一直致力於全面提升MySQL復制,通過引入新的和一些有趣

    MySQL 8.0新特性

    MySQL8.0新特性一、MySQL 8.0中添加的功能1、新的系統字典表 整合了存儲有關數據庫對象信息的事務數據字典,所有的元數據都用InnoDB引擎進行存儲2、支持DDL 原子操作 InnoDB表的DDL支持事務完整性,要麽成功要麽回滾,將DDL操作回滾日誌寫入到data dictionary

    docker mysql 8.0

    mysq 登錄 tar doc ID 導出 base clas caching Pull library/mysql $ docker pull mysql Load image $ docker load -i mysql.tar Save image

    What's New In MySQL 8.0

    維護 fast 執行 事務 emc cume_dist bili product nta 由於8.0內有很多C++11特性。需要gcc4.8版本以上。Rhel6系列默認gcc是4.7。在安裝gcc6.1之後仍然檢查不過。 原因可能是6.1版本不一定高於4.7

    MYSQL-8.0.11-WINX64(免安裝版)配置

    OS value auth IE alter ransac 不支持 caching 安裝服務 1. 解壓zip包到安裝目錄 首先,將mysql-8.0.11-winx64.zip 解壓縮到 安裝D:/mysql-8.0.11-winx64 目錄下, 2.配置文件 在安裝根目

    RPM安裝MySQL 8.0

    MySQL卸載centos自帶的mariadb rpm -qa mariadb* rpm -e *** --nodeps 下載mysql 8.0的rpm完整包 wget -O /tmp/mysql-8.0.11-1.el7.x86_64.rpm-bundle.tar https://cdn.mysql.co

    MySql 8.0.11 在win10下的zip非安裝配置

    cmd blank sans 位置 路徑 密碼 IT alt mysql 在win10使用mysql8.0.11的zip包進行配置時,搜到的教程很多坑,特此總結成功配置的方法。   1、下載非安裝的zip包       mysql 8.0.11 64位   2、解壓zi