1. ホーム
  2. sql-server

[解決済み] SQL Serverへのファイルの保存

2023-03-25 11:40:19

質問

古い質問ですが、SQL Server 2012 では、データベースにファイルを保存してもよいのでしょうか。それとも、ファイルはファイルシステムに保存し、データベースでは参照するだけでよいのでしょうか。

もし、データベースにファイルを格納することが最近許容されると考えられるなら、それを行う最も効果的な方法は何でしょうか?

暗号化を施す予定なので、処理が軽快でないことは承知しています。

どのように解決するのですか?

Microsoft Research による、次のような非常に優れた論文があります。 ブロブ化するかしないか .

多くのパフォーマンステストと分析の後の彼らの結論はこうです。

  • 画像やドキュメントのサイズが通常 256K 未満である場合、それらをデータベースの VARBINARY カラムに格納する方が効率的である。

  • 写真やドキュメントのサイズが通常 1 MB を超える場合、ファイルシステムに格納する方が効率的です (SQL Server 2008 の FILESTREAM 属性により、それらはまだトランザクション制御下にあり、データベースの一部です)。

  • この 2 つの間で、用途に応じて使い分けが必要です。

写真を SQL Server テーブルに入れることにした場合、それらの写真を保存するために別のテーブルを使用することを強くお勧めします。従業員の写真を Employee テーブルに保存しないで、別のテーブルに保存してください。そうすれば、Employee テーブルは無駄がなく、非常に効率的で、クエリーの一部として従業員の写真も常に選択する必要がないと想定されるからです。

ファイルグループについては ファイルおよびファイルグループ アーキテクチャ を参照してください。基本的には、最初から大きなデータ構造用に別のファイルグループを使ってデータベースを作成するか、後で追加のファイルグループを追加します。これを "LARGE_DATA" と呼ぶことにします。

これで、VARCHAR(MAX) または VARBINARY(MAX) カラムを格納する必要がある新しいテーブルを作成するときはいつでも、このファイルグループを大規模データ用に指定することができるようになりました。

 CREATE TABLE dbo.YourTable
     (....... define the fields here ......)
     ON Data                   -- the basic "Data" filegroup for the regular data
     TEXTIMAGE_ON LARGE_DATA   -- the filegroup for large chunks of data

ファイルグループに関する MSDN のイントロをチェックして、遊んでみてください!