Индекс в таблице — это не что иное, как указатель на ее данные. Они используются для ускорения поиска данных из таблицы.
Если мы используем индексы, операторы 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");
}
}
Выход
При выполнении это генерирует следующий результат