Apache Derby - Индексы Derby
Индекс в таблице - это не что иное, как указатель на ее данные. Они используются для ускорения извлечения данных из таблицы.
Если мы используем индексы, операторы INSERT и UPDATE выполняются в более медленной фазе. В то время как SELECT и WHERE выполняются за меньшее время.
Создание индекса
Оператор CREATE INDEX используется для создания нового индекса в таблице в базе данных Derby.
Синтаксис
Ниже приведен синтаксис оператора CREATE INDEX.
CTREATE INDEX index_name on table_name (column_name);
пример
Предположим, мы создали таблицу с именем «Сотрудники» в 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. После создания индекса UNIQUE для столбца в таблице не допускается дублирование значений.
Синтаксис
Ниже приводится синтаксис создания уникального индекса.
CREATE UNIQUE INDEX index_name on table_name (column_name);
пример
В следующем примере создается индекс UNIQUE по идентификатору столбца таблицы 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'.
Создание КОМПОЗИТНОГО индекса
Вы можете создать единый индекс для двух строк, и он называется составным индексом.
Синтаксис
Ниже приводится синтаксис составного индекса.
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;
пример
В следующем примере я отображает индексы в таблице «Сотрудники».
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;
пример
В следующем примере удаляются индексы с именами композитный_индекс и уникальный_индекс, созданные выше.
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");
}
}
Выход
При выполнении это дает следующий результат
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