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