データベースを最適化する方法 (プログラム)

ここでは、SqlServerCe.Engine オブジェクトの Compact メソッド、および SqlServerCe.Engine オブジェクトの Shrink メソッドを使用して、SQL Server Compact 4.0 データベースを圧縮する方法について学習します。Compact メソッドと Shrink メソッドは、データベース サイズを小さくする方法が少し異なっています。

Compact メソッドは、データベース ファイルの領域を再利用するために使用します。また、パスワードやロケール ID (LCID) 設定などのデータベース設定を変更する場合にも使用できます。データベースを最適化すると、新しいデータベース ファイルが作成され、隣接するデータベース ページ内に格納されるようにテーブル ページが再構成されます。すべてのデータが新しいデータ ページに書き込まれることによって未使用領域が再利用されます。

データベース ファイルの領域の再利用には、Shrink メソッドも使用できます。ただし、Shrink メソッドはレコードを再構成して空のレコードを削除するだけで、新しいデータベース ファイルを作成しないので、データベース設定の変更には使用できません。

また、ここでは、SQL Server Compact データベースの大文字と小文字の区別に関する設定を変更する Compact メソッドの使用方法についても説明します。

Compact および Shrink の詳細については、「データベースの管理 (SQL Server Compact)」を参照してください。SqlServerCe 名前空間の使用については、SqlServerCe 名前空間のリファレンス ドキュメントを参照してください。

SQL Server Compact 4.0 での手順

データベースを最適化するには

  1. Engine オブジェクトを作成し、最適化する既存のデータベースへの接続文字列を渡します。

    SqlCeEngine engine = new SqlCeEngine("Data Source = AdWks.sdf");
    
  2. Compact メソッドを呼び出します。Compact メソッドを呼び出す際に、パスワードの保護や暗号化を追加するなど、新しいデータベース プロパティを指定することもできます。

    engine.Compact("Data Source=; Password = <enterStrongPasswordHere>");
    

データベースを圧縮するには

  1. Engine オブジェクトを作成し、圧縮するデータベースに接続文字列を渡します。

    SqlCeEngine engine = new SqlCeEngine("Data Source = AdWks.sdf");
    
  2. Shrink メソッドを呼び出します。

    engine.Shrink();
    

コンパクト データベースの大文字と小文字の区別を変更するには

  1. Engine オブジェクトを作成し、最適化する既存のデータベースへの接続文字列を渡します。

    SqlCeEngine engine = 
         new SqlCeEngine("Data Source= Test.sdf; LCID= 1033");
    
  2. Compact メソッドを呼び出します。Compact メソッドを呼び出す際に、大文字と小文字の区別など、新しいデータベース プロパティを指定することもできます。Compact メソッドの呼び出し時に "Case Sensitive" を指定しない場合、大文字と小文字の区別に関する設定は変更されません。

    engine.Compact("Data Source= Test.sdf; LCID= 1033; Case Sensitive=true");
    

注意

大文字と小文字の区別は、SQL Server Compact SP1 リリースで導入されました。詳細については、「照合順序の使用 (SQL Server Compact)」を参照してください。

使用例

次の例では、既存の SQL Server Compact データベースを最適化し、データベース プロパティを変更します。

SqlCeEngine engine = new SqlCeEngine("Data Source = AdventureWorks.sdf");

// Specify null destination connection string for in-place compaction
//
engine.Compact(null);

// Specify connection string for new database options
//
engine.Compact("Data Source=; Password =<enterStrongPasswordHere>");
Dim engine As New SqlCeEngine("Data Source = AdventureWorks.sdf")

 ' Specify null destination connection string for in-place compaction
engine.Compact(Nothing)

' Specify connection string for new database options
'
engine.Compact("Data Source=; Password =<enterStrongPasswordHere>")

この例では、既存の SQL Server Compact データベースを圧縮します。

SqlCeEngine engine = new SqlCeEngine("Data Source = AdventureWorks.sdf");
engine.Shrink();
Dim engine As New SqlCeEngine("Data Source = AdventureWorks.sdf")
engine.Shrink()

Compact メソッドを使用して、SQL Server Compact データベースの大文字と小文字の区別を変更する方法の例を次に示します。このコード例では、その後 GetDatabaseInfo メソッドを呼び出して、データベースのロケール、暗号化モード、および大文字と小文字の区別に関する値を取得します。

// Default case-insentive connection string.
string connStringCI = "Data Source= Test.sdf; LCID= 1033";

// Set "Case Sensitive" to true to change the collation from CI to CS.
string connStringCS = 
    "Data Source= Test.sdf; LCID= 1033; Case Sensitive=true"; 

if (File.Exists("Test.sdf"))
{
   File.Delete("Test.sdf");
}

SqlCeEngine engine = new SqlCeEngine(connStringCI);
// The collation of the database is case-insensitive.
engine.CreateDatabase();

// The collation of the database will be case-sensitive because of 
// the new connection string used by the Compact method.  
engine.Compact(connStringCS);

SqlCeConnection conn = null;
conn = new SqlCeConnection(connStringCS);
conn.Open();

//Retrieve the connection string information - notice the 'Case 
// Sensitive' value.
List<KeyValuePair<string, string>> dbinfo = conn.GetDatabaseInfo();

Console.WriteLine("\nGetDatabaseInfo() results:");

foreach (KeyValuePair<string, string> kvp in dbinfo)
{
    Console.WriteLine(kvp);
}
' Default case-insentive connection string.
Dim connStringCI As String = "Data Source= Test.sdf; LCID= 1033"

' Set "Case Sensitive" to true to change the collation from CI to CS.
Dim connStringCS As String = "Data Source= Test.sdf; LCID= 1033; Case Sensitive=true"

If File.Exists("Test.sdf") Then
    File.Delete("Test.sdf")
End If

Dim engine As New SqlCeEngine(connStringCI)
' The collation of the database is case insensitive.
engine.CreateDatabase()

' The collation of the database will be case sensitive because of 
' the new connection string used by the Compact method.
engine.Compact(connStringCS)

Dim conn As SqlCeConnection = Nothing
conn = New SqlCeConnection(connStringCS)
conn.Open()

'Retrieve the connection string information - notice the 'Case Sensitive' value.
Dim dbinfo As List(Of KeyValuePair(Of String, String)) = conn.GetDatabaseInfo

Console.WriteLine(vbNewLine & "GetDatabaseInfo() results:")

Dim kvp As KeyValuePair(Of String, String)
For Each kvp In dbinfo
    Console.WriteLine(kvp)
Next

関連項目

概念

データベースの管理 (SQL Server Compact)

一般的なデータベース作業 (SQL Server Compact)