国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Mysql - MySQL 8.0的關系數據庫新特性詳解

MySQL 8.0的關系數據庫新特性詳解

2020-08-29 17:42捏造的信仰 Mysql

廣受歡迎的開源數據庫MySQL 8中,包括了眾多新特性,下面這篇文章主要給大家介紹了關于MySQL 8.0的關系數據庫新特性的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起看看吧。

前言

MySQL 8.0 當前的最新版本是 8.0.4 rc,估計正式版本出來也快了。本文介紹幾個 8.0 在關系數據庫方面的主要新特性。

你可能已經知道 MySQL 從版本 5.7 開始提供了 NoSQL 存儲的功能,在 8.0 中這部分功能也得到了一些改進,但鑒于這個在實際當中用得極少,本人也是沒用過,所以本文不會介紹這方面的東西,而是關注其關系數據庫方面。

1、隱藏索引

隱藏索引的特性對于性能調試非常有用。在 8.0 中,索引可以被“隱藏”和“顯示”。當一個索引隱藏時,它不會被查詢優化器所使用。

也就是說,我們可以隱藏一個索引,然后觀察對數據庫的影響。如果數據庫性能有所下降,就說明這個索引是有用的,于是將其“恢復顯示”即可;如果數據庫性能看不出變化,說明這個索引是多余的,可以刪掉了。

隱藏一個索引的語法是:

?
1
ALTER TABLE t ALTER INDEX i INVISIBLE;

恢復顯示該索引的語法是:

?
1
ALTER TABLE t ALTER INDEX i VISIBLE;

當一個索引被隱藏時,我們可以從 show index 命令的輸出中看到,該索引的 Visible 屬性值為 NO。

注意:當索引被隱藏時,它的內容仍然是和正常索引一樣實時更新的,這個特性本身是專門為優化調試使用。如果你長期隱藏一個索引,那還不如干脆刪掉,因為畢竟索引的存在會影響插入、更新和刪除的性能。

2、設置持久化

MySQL 的設置可以在運行時通過 SET GLOBAL 命令來更改,但是這種更改只會臨時生效,到下次啟動時數據庫又會從配置文件中讀取。

MySQL 8 新增了 SET PERSIST 命令,例如:

?
1
SET PERSIST max_connections = 500;

MySQL 會將該命令的配置保存到數據目錄下的 mysqld-auto.cnf 文件中,下次啟動時會讀取該文件,用其中的配置來覆蓋缺省的配置文件。

3、UTF-8 編碼

從 MySQL 8 開始,數據庫的缺省編碼將改為 utf8mb4,這個編碼包含了所有 emoji 字符。多少年來我們使用 MySQL 都要在編碼方面小心翼翼,生怕忘了將缺省的 latin 改掉而出現亂碼問題。從此以后就不用擔心了。

4、通用表表達式(Common Table Expressions)

復雜的查詢會使用嵌入式表,例如:

?
1
2
3
SELECT t1.*, t2.* FROM
 (SELECT col1 FROM table1) t1,
 (SELECT col2 FROM table2) t2;

而有了 CTE,我們可以這樣寫:

?
1
2
3
4
5
WITH
 t1 AS (SELECT col1 FROM table1),
 t2 AS (SELECT col2 FROM table2)
SELECT t1.*, t2.*
FROM t1, t2;

這樣看上去層次和區域都更加分明,改起來也更清晰的知道要改哪一部分。

關于 CTE 的更詳細介紹請看官方文檔。

5、窗口函數(Window Functions)

MySQL 被吐槽最多的特性之一就是缺少 rank() 函數,當需要在查詢當中實現排名時,必須手寫 @ 變量。但是從 8.0 開始,MySQL 新增了一個叫窗口函數的概念,它可以用來實現若干新的查詢方式。

窗口函數有點像是 SUM()、COUNT() 那樣的集合函數,但它并不會將多行查詢結果合并為一行,而是將結果放回多行當中。也就是說,窗口函數是不需要 GROUP BY 的。

假設我們有一張 “班級學生人數” 表:

?
1
2
3
4
5
6
7
8
9
10
11
mysql> select * from classes;
+--------+-----------+
| name | stu_count |
+--------+-----------+
| class1 |  41 |
| class2 |  43 |
| class3 |  57 |
| class4 |  57 |
| class5 |  37 |
+--------+-----------+
5 rows in set (0.00 sec)

如果我要對班級人數從小到大進行排名,可以這樣利用窗口函數:

?
1
2
3
4
5
6
7
8
9
10
11
12
mysql> select *, rank() over w as `rank` from classes
 -> window w as (order by stu_count);
+--------+-----------+------+
| name | stu_count | rank |
+--------+-----------+------+
| class5 |  37 | 1 |
| class1 |  41 | 2 |
| class2 |  43 | 3 |
| class3 |  57 | 4 |
| class4 |  57 | 4 |
+--------+-----------+------+
5 rows in set (0.00 sec)

在這里我們創建了名為 w 的 window,規定它對 stu_count 字段進行排序,然后在 select 子句中對 w 執行 rank() 方法,將結果輸出為 rank 字段。

其實,window 的創建是可選的。例如我要在每一行中加入學生總數,則可以這樣:

?
1
2
3
4
5
6
7
8
9
10
11
12
mysql> select *, sum(stu_count) over() as total_count
 -> from classes;
+--------+-----------+-------------+
| name | stu_count | total_count |
+--------+-----------+-------------+
| class1 |  41 |   235 |
| class2 |  43 |   235 |
| class3 |  57 |   235 |
| class4 |  57 |   235 |
| class5 |  37 |   235 |
+--------+-----------+-------------+
5 rows in set (0.00 sec)

這樣做有什么用呢?這樣我們就可以一次性將每個班級的學生人數占比查出來了:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
mysql> select *,
 -> (stu_count)/(sum(stu_count) over()) as rate
 -> from classes;
+--------+-----------+--------+
| name | stu_count | rate |
+--------+-----------+--------+
| class1 |  41 | 0.1745 |
| class2 |  43 | 0.1830 |
| class3 |  57 | 0.2426 |
| class4 |  57 | 0.2426 |
| class5 |  37 | 0.1574 |
+--------+-----------+--------+
5 rows in set (0.00 sec)

這在以前可是要寫一大段晦澀難懂的語句才能做到的哦!關于窗口函數的更多介紹在這里。

怎么樣,看了以上的介紹,是不是對 MySQL 8.0 有更多期待了呢?

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

原文鏈接:https://segmentfault.com/a/1190000013803247

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 在线观看亚洲精品 | 免费一级视频在线观看 | av中文字幕在线 | 亚洲精品视频一区二区三区 | 色婷婷国产精品综合在线观看 | 成人性做爰av片免费看 | 久久精品网 | 国产丝袜一区 | jizz中国zz女人18高潮 | 久久精品中文字幕一区二区 | 精品伊人 | 久久se精品一区精品二区 | 国产精品久久久久久久久久久新郎 | av一区二区不卡 | 韩国精品一区二区 | 97久久精品午夜一区二区 | 国产精品一区二区久久久 | 国产精品一区二区久久 | 岛国av在线免费观看 | 五月婷婷综合网 | 亚洲精品影院在线 | 日韩电影免费在线观看中文字幕 | 国产精品对白一区二区三区 | 黄视频网站在线观看 | 中文字幕第十二页 | 精品综合久久 | 国产精品久久久亚洲 | 99久久影院 | 在线观看一区视频 | av软件在线 | 毛片网站大全 | 国产精品久久久久久亚洲调教 | 久久久午夜爽爽一区二区三区三州 | 成人在线观看h | 韩国精品免费视频 | 亚洲狠狠爱 | 97精品国产97久久久久久免费 | 亚洲精品日韩精品 | 日本一区二区三区视频免费看 | 国产成人片| 久久精品无码一区二区三区 |