Partition By 句を使用すると、クエリのパフォーマンスを向上させることができます。ストレージ要件が軽減され、データ管理性が向上します。大きなテーブルを分割することにより、データのごく一部にのみアクセスするクエリをより高速に実行できます。パーティショニングにより、バックアップとリカバリの時間も短縮されます。この記事では、MySQL の Partition By 句について、構文とさまざまな例を示して説明します。
###導入###PARTITION BY 句は常に OVER() 句内で使用する必要があります。 PARTITION BY 句によって作成されたパーティションはウィンドウとも呼ばれます。この句は、RANK()、LEAD()、LAG() などのウィンドウ関数に特に作用します。
OVER() 句から PARTITION BY 句を除外すると、テーブル全体が 1 つのパーティションとして扱われます。
###文法### リーリーorder_clause と Frame_clause は文法のオプションのコンポーネントです。
「ハッカー」テーブルを例に挙げてみましょう -
h_id
チャレンジID | 分数 | 3 |
|
---|---|---|---|
111 | 20 | 2 |
|
111 | 80 | 5 |
|
112 | 40 | 5 |
|
114 | 90 | 4 |
|
112 | 30 | 1 |
|
112 | 40 | 各チャレンジにおける各ハッカーのランキングを決定する必要があります。言い換えれば、チャレンジに参加したすべてのハッカーと、そのチャレンジにおけるそれぞれのランキングをリストする必要があります。 | これを実現するには、次のクエリを使用します:
order by 句は、各パーティション内のハッカーをスコアの降順に並べ替えます。
over() 句は、ウィンドウ関数 Rank() のテーブル行を分割および並べ替える方法を指定します。
ウィンドウ関数 Density_rank() は、チャレンジの順序付けられたパーティション内の各ハッカーにランクを割り当てます。 2 人のハッカーが同じスコアを持っている場合、同じランキングが割り当てられます。
結果出力には、すべてのハッカーのリストと各チャレンジのそれぞれのランキングが表示されます -
チャレンジID
h_name | 分数 | ######ランキング###### |
111 |
2 |
---|---|---|---|---|
80 | 1 | 111 |
3 |
|
20 | 2 | 112 |
||
40 | 1 | 112 |
1 |
|
40 | 1 | 112 | 4 |
|
30 | 2 | 114 |
5 |
|
90 | 1 | このようにして、すべてのハッカーのリストと、それぞれのチャレンジにおけるそのランキングを取得することができました。 | PARTITION BY 句の使用法
テーブルの行を個別のパーティションにグループ化して、パーティション内の特定の行に対して計算を実行できるようにします。 |
ストレージ要件を削減し、データ管理性を向上させます。
以上がMySQL PARTITION BY 子句の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。