1. ホーム
  2. sql-server

[解決済み】SQL Serverで画像を保存する?

2022-04-19 11:20:02

質問

私は小さなデモサイトを作り、その中でSQLサーバーの画像カラムに画像を保存しています。いくつかの質問があります...

  • これってダメなんでしょうか?

  • サイトが大きくなったとき、パフォーマンスに影響がありますか?

画像をディスクに保存して、データベースには画像への参照だけを保存するという方法もあります。これは多くの人が経験したことのある共通のジレンマに違いありません。何かアドバイスがあれば歓迎しますし、実際、できることなら失敗を少なくしたいと思っています。

解決方法は?

マイクロソフト・リサーチが発表した論文に ブロブ化するかしないか .

多くの性能テストと分析を行った彼らの結論はこうだ。

  • 写真やドキュメントのサイズが通常256KB以下の場合、データベースのVARBINARYカラムに格納する方が効率的です。

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

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

もし写真をSQL Serverのテーブルに入れることに決めたら、その写真を保存するために別のテーブルを使うことを強くお勧めします。従業員の写真を従業員テーブルに保存しないで、別のテーブルに保存してください。そうすれば、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イントロをチェックして、遊んでみてください。