Учебники

Apache Derby — индексы дерби

Индекс в таблице — это не что иное, как указатель на ее данные. Они используются для ускорения поиска данных из таблицы.

Если мы используем индексы, операторы INSERT и UPDATE выполняются в более медленной фазе. Принимая во внимание, что SELECT и WHERE выполняются за меньшее время.

Создание индекса

Оператор CREATE INDEX используется для создания нового индекса в таблице в базе данных Derby.

Синтаксис

Ниже приводится синтаксис оператора CREATE INDEX —

CTREATE INDEX index_name on table_name (column_name);

пример

Предположим, мы создали таблицу с именем Employees в Apache Derby, как показано ниже.

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 создает индекс для столбца с именем Salary в таблице Employees.

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

Создание УНИКАЛЬНОГО индекса

В Apache Derby для интеграции данных используются уникальные индексы. После создания индекса UNIQUE для столбца в таблице он не допускает повторяющихся значений.

Синтаксис

Ниже приводится синтаксис создания уникального индекса.

CREATE UNIQUE INDEX index_name on table_name (column_name);

пример

В следующем примере создается уникальный индекс для идентификатора столбца таблицы Employee.

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'.

Создание составного индекса

Вы можете создать один индекс на две строки, и он называется Composite index.

Синтаксис

Ниже приводится синтаксис составного индекса.

CREATE INDEX index_name on table_name (column_name1, column_name2);

пример

Следующий индекс создает составной индекс по столбцам Имя и Расположение.

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

Отображение индексов

Запрос SHOW INDEXES отображает список индексов в таблице.

Синтаксис

Ниже приводится синтаксис оператора SHOW INDEXES —

SHOW INDEXES FROM table_name;

пример

В следующем примере я отображаю индексы в таблице «Сотрудники».

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

Теперь, если вы проверите список индексов, вы можете увидеть индекс по одному столбцу, поскольку мы удалили остальные.

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");
   }
}

Выход

При выполнении это генерирует следующий результат