Apache-derby-indexes

提供:Dev Guides
移動先:案内検索

Apache Derby-Derbyインデックス

テーブル内のインデックスは、そのデータへのポインタに他なりません。 これらは、テーブルからのデータ取得を高速化するために使用されます。

インデックスを使用する場合、INSERTおよびUPDATEステートメントはより遅いフェーズで実行されます。 一方、SELECTとWHEREはより短い時間で実行されます。

インデックスを作成する

CREATE INDEXステートメントは、Derbyデータベースのテーブルに新しいインデックスを作成するために使用されます。

構文

以下は、CREATE INDEXステートメントの構文です-

CTREATE INDEX index_name on table_name (column_name);

以下に示すように、Apache DerbyにEmployeesという名前のテーブルを作成したとします。

CREATE TABLE Emp ( Id INT NOT NULL GENERATED ALWAYS AS IDENTITY,
   Name VARCHAR(255),
   Salary INT NOT NULL,
   Location VARCHAR(255),
   Phone_Number BIGINT
);

次のSQLステートメントは、EmployeesテーブルのSalaryという列にインデックスを作成します。

ij> CREATE INDEX example_index on Emp (Salary);
0 rows inserted/updated/deleted

UNIQUEインデックスの作成

Apache Derbyでは、UNIQUEインデックスがデータ統合に使用されます。 テーブルの列にUNIQUEインデックスを作成すると、値の重複は許可されません。

構文

一意のインデックスを作成する構文は次のとおりです。

CREATE UNIQUE INDEX index_name on table_name (column_name);

次の例では、テーブルEmployeeの列IDにUNIQUEインデックスを作成します。

ij> CREATE UNIQUE INDEX unique_index on Emp (Phone_Number);
0 rows inserted/updated/deleted

列に一意のインデックスを作成したら、その列に別の行の同じ値を入力することはできません。 要するに、UNIQEインデックスが設定されている列では、重複値は許可されません。

以下に示すように、Empテーブルに行を挿入します

ij> INSERT INTO Emp(Name, Salary, Location, Phone_Number) VALUES ('Amit',
45000, 'Hyderabad', 9848022338);
1 row inserted/updated/deleted

Phone_No列に一意のインデックスを作成したため、前のレコードと同じ値を入力するように入力すると、エラーが表示されます。

ij> INSERT INTO Emp(Name, Salary, Location, Phone_Number) VALUES ('Sumit',
35000, 'Chennai', 9848022338);
ERROR 23505: The statement was aborted because it would have caused a duplicate
key value in a unique or primary key constraint or unique index identified by
'UNIQUE_INDEX' defined on 'EMP'.

複合インデックスの作成

2つの行に単一のインデックスを作成できます。これは複合インデックスと呼ばれます。

構文

以下は複合インデックスの構文です。

CREATE INDEX index_name on table_name (column_name1, column_name2);

次のインデックスは、Name列とLocation列に複合インデックスを作成します。

ij> CREATE INDEX composite_index on Emp (Name, Location);
0 rows inserted/updated/deleted

インデックスの表示

SHOW INDEXESクエリは、テーブルのインデックスのリストを表示します。

構文

SHOW INDEXESステートメントの構文は次のとおりです-

SHOW INDEXES FROM table_name;

次の例では、テーブルEmployeesのインデックスを表示します。

ij> SHOW INDEXES FROM Emp;

これにより、次の結果が生成されます。

ij> SHOW INDEXES FROM Emp;
TABLE_NAME |COLUMN_NAME |NON_U&|TYPE|ASC&|CARDINA&|PAGES
----------------------------------------------------------------------------
EMP |PHONE_NUMBER |false |3 |A |NULL |NULL
EMP |NAME |true |3 |A |NULL |NULL
EMP |LOCATION |true |3 |A |NULL |NULL
EMP |SALARY |true |3 |A |NULL |NULL
4 rows selected

インデックスの削除

Drop Indexステートメントは、列の指定されたインデックスを削除/削除します。

構文

DROP INDEXステートメントの構文は次のとおりです。

DROP INDEX index_name;

次の例では、上記で作成したcomposite_indexおよびunique_indexという名前のインデックスを削除します。

ij> DROP INDEX composite_index;
0 rows inserted/updated/deleted
ij>Drop INDEX unique_index;
0 rows inserted/updated/deleted

インデックスのリストを確認すると、残りの列が削除されているため、1つの列のインデックスを確認できます。

ij> SHOW INDEXES FROM Emp;
TABLE_NAME |COLUMN_NAME |NON_U&|TYPE|ASC&|CARDINA&|PAGES
----------------------------------------------------------------------------
EMP |SALARY |true |3 |A |NULL |NULL
1 row selected

JDBCプログラムを使用したインデックスの処理

次のJDBCプログラムは、テーブルの列にドロップインデックスを作成する方法を示しています。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class IndexesExample {
   public static void main(String args[]) throws Exception {

     //Registering the driver
      Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
     //Getting the Connection object
      String URL = "jdbc:derby:MYDATABASE;create=true";
      Connection conn = DriverManager.getConnection(URL);

     //Creating the Statement object
      Statement stmt = conn.createStatement();

     //Creating the Emp table
      String createQuery = "CREATE TABLE Emp( "
         + "Id INT NOT NULL GENERATED ALWAYS AS IDENTITY, "
         + "Name VARCHAR(255), "
         + "Salary INT NOT NULL, "
         + "Location VARCHAR(255), "
         + "Phone_Number BIGINT )";
      stmt.execute(createQuery);
      System.out.println("Table created");
      System.out.println(" ");

     //Creating an Index on the column Salary
      stmt.execute("CREATE INDEX example_index on Emp (Salary)");
      System.out.println("Index example_index inserted");
      System.out.println(" ");

     //Creating an Unique index on the column Phone_Number
      stmt.execute("CREATE UNIQUE INDEX unique_index on Emp (Phone_Number)");
      System.out.println("Index unique_index inserted");
      System.out.println(" ");

     //Creating a Composite Index on the columns Name and Location
      stmt.execute("CREATE INDEX composite_index on Emp (Name, Location)");
      System.out.println("Index composite_index inserted");
      System.out.println(" ");

     //listing all the indexes
      System.out.println("Listing all the columns with indexes");

     //Dropping indexes
      System.out.println("Dropping indexes unique_index and, composite_index ");
      stmt.execute("Drop INDEX unique_index");
      stmt.execute("DROP INDEX composite_index");
   }
}

出力

実行すると、次の結果が生成されます

Table created
Index example_index inserted

Index unique_index inserted

Index composite_index inserted

Listing all the columns with indexes
Dropping indexes unique_index and, composite_index