Partition By 子句可用于提高查詢性能。它降低了存儲需求,并提高了數(shù)據(jù)可管理性。通過對大表進行分區(qū),可以更快地執(zhí)行僅訪問一小部分數(shù)據(jù)的查詢。分區(qū)還可以縮短備份和恢復(fù)時間。在本文中,我們將通過語法和各種示例討論 MySQL 中的 Partition By 子句。
簡介
PARTITION BY 子句的目的是將表的行分組到單獨的分區(qū)中。當使用同一分區(qū)中的其他行對分區(qū)內(nèi)的特定行執(zhí)行計算時,這特別有用。
PARTITION BY 子句必須始終在 OVER() 子句中使用。 PARTITION BY 子句創(chuàng)建的分區(qū)也稱為窗口。該子句專門對 RANK()、LEAD() 和 LAG() 等窗口函數(shù)進行操作。
如果從 OVER() 子句中排除 PARTITION BY 子句,則整個表將被視為單個分區(qū)。
語法
Window_function ( expression ) Over ( partition by expr [order_clause] [frame_clause] )
登錄后復(fù)制
order_clause 和frame_clause 是語法的可選組件。
在 MySQL 中,Partition 子句中的表達式可以是列名,也可以是內(nèi)置函數(shù)。但是,在標準 SQL 中,表達式中只允許使用列名稱。
示例
讓我們以“Hacker”表為例 –
|
h_id |
h_name |
challenge_id |
分數(shù) |
|---|---|---|---|
|
3 |
拉朱 |
111 |
20 |
|
2 |
密斯萊什 |
111 |
80 |
|
5 |
樓陀羅 |
112 |
40 |
|
5 |
莫漢 |
114 |
90 |
|
4 |
洛汗 |
112 |
30 |
|
1 |
索漢 |
112 |
40 |
我們需要確定每個挑戰(zhàn)中每個黑客的排名。換句話說,我們必須列出所有參與挑戰(zhàn)的黑客以及他們在該挑戰(zhàn)中各自的排名。
為了實現(xiàn)此目的,我們使用以下查詢:
select challenge_id, h_id, h_name, score, dense_rank() over ( partition by challenge_id order by score desc ) as "rank", from hacker;
登錄后復(fù)制
在此查詢中,partition by 子句按challenge_id 對表進行分組。
order by 子句按照得分降序?qū)γ總€分區(qū)中的黑客進行排序。
over() 子句指定如何對窗口函數(shù)rank() 的表行進行分區(qū)和排序。
窗口函數(shù)dense_rank()為挑戰(zhàn)的有序分區(qū)中的每個黑客分配一個等級。如果兩個黑客得分相同,則他們被分配相同的排名。
結(jié)果輸出顯示所有黑客的列表以及他們在每個挑戰(zhàn)中各自的排名 –
|
challenge_id |
h_id |
h_name |
分數(shù) |
排名 |
|---|---|---|---|---|
|
111 |
2 |
密斯萊什 |
80 |
1 |
|
111 |
3 |
拉朱 |
20 |
2 |
|
112 |
樓陀羅 |
40 |
1 |
|
|
112 |
1 |
索漢 |
40 |
1 |
| 112 |
4 |
洛汗 |
30 |
2 |
|
114 |
5 |
莫漢 |
90 |
1 |
因此,我們成功獲得了所有黑客的列表以及他們在每個單獨挑戰(zhàn)中的排名。
PARTITION BY 子句的使用
將表的行分組到單獨的分區(qū)中,以便對分區(qū)內(nèi)的特定行執(zhí)行計算。
降低存儲要求并提高數(shù)據(jù)可管理性。
通過更快地執(zhí)行僅訪問一小部分數(shù)據(jù)的查詢來提高查詢性能。
縮短備份和恢復(fù)時間。
結(jié)論
MySQL 中的 PARTITION BY 子句是一個有用的工具,用于將表的行分組到單獨的分區(qū)中,從而提高查詢性能并減少存儲需求。該子句專門對 RANK()、LEAD() 和 LAG() 等窗口函數(shù)進行操作。語法很簡單,并且允許子句中使用的表達式類型具有靈活性。上面的示例演示了 PARTITION BY 子句在計算每個客戶的銷售總額時的功能。通過利用這一強大的功能,用戶可以優(yōu)化數(shù)據(jù)庫性能并提高數(shù)據(jù)可管理性。
以上就是MySQL PARTITION BY 子句的詳細內(nèi)容,更多請關(guān)注www.92cms.cn其它相關(guān)文章!






