$PARTITION
SQL Serverで使用する目的が明確にわかりませんか?MSDNのコンテンツを読みましたが、まだわかりません。
どのようなメリットがありますか?
$PARTITION
SQL Serverで使用する目的が明確にわかりませんか?MSDNのコンテンツを読みましたが、まだわかりません。
どのようなメリットがありますか?
この関数を使用して、特定の値に使用されるパーティション番号を決定できます。たとえば、日付でパーティション分割されたテーブルでは、値をテーブルに挿入する前であっても、2001 年 7 月 1 日にどのパーティションが使用されるかがわかります。
SELECT $PARTITION.PF_RangeByYear('20010701')
これを使用して、各パーティション番号の行数を見つけることもできます。
SELECT $partition.PF_RangeByYear(orderdate) AS partition#,
COUNT(*) AS cnt
FROM Orders
GROUP BY $partition.PF_RangeByYear(orderdate);
sys.partitions
またはからはるかに簡単にできることは間違いありませんsys.dm_db_partition_stats
。
(これらの例はどちらもItzik の SQL Mag 記事から引用したものです。)
データベース内のテーブルを分割するということは、データベースを 1 つのテーブルのように扱いながら複数の部分に分割することを意味します。ここでは、水平分割について説明します。つまり、各分割にはすべての列が含まれ、一部の行のみが含まれます。これを行うには、パーティション分割列の行の値に基づいて、行が属するパーティションを定義するパーティション関数を定義する必要があります。$PARTITION
行がどのパーティションに属しているかを示します。
行の評価を表す整数列があり、ユーザーは評価が 4 を超えるアイテムのみを要求することが多いと予想されます。評価に基づいて分割できます。パーティション関数は次のようになります。
CREATE PARTITION FUNCTION partitionByRating (int) FOR VALUES (4);
次に、テーブルの行がどのパーティションに属しているかを調べるために、次のクエリを実行できます。
SELECT $partition.partitionByRating(i.Rating) AS [Partition Number],
rating AS [Rating],
name AS [Item Name]
FROM dbo.Items AS i
そして、次のような結果が得られるかもしれません:
Partition Rating Item Name
1 1 Ball
1 4 Scooter
2 5 Blaster
つまり、Ball と Scooter は一緒に保管されますが、ストレージへのパーティションの割り当て方法によっては、Blaster が別の場所に保管される可能性があります。