Apache Derby - Các chỉ số Derby

Chỉ mục trong bảng không là gì khác ngoài một con trỏ đến dữ liệu của nó. Chúng được sử dụng để tăng tốc độ truy xuất dữ liệu từ một bảng.

Nếu chúng ta sử dụng các chỉ mục, các câu lệnh INSERT và UPDATE sẽ được thực thi trong một giai đoạn chậm hơn. Trong khi SELECT và WHERE được thực thi với thời gian ngắn hơn.

Tạo chỉ mục

Câu lệnh CREATE INDEX được sử dụng để tạo Chỉ mục mới trong bảng trong cơ sở dữ liệu Derby.

Cú pháp

Sau đây là cú pháp của câu lệnh CREATE INDEX:

CTREATE INDEX index_name on table_name (column_name);

Thí dụ

Giả sử chúng ta đã tạo một bảng có tên Nhân viên trong Apache Derby như hình dưới đây.

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

Câu lệnh SQL sau tạo một chỉ mục trên cột có tên Lương trong bảng Nhân viên.

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

Tạo chỉ mục DUY NHẤT

Trong Apache Derby, các chỉ mục DUY NHẤT được sử dụng để tích hợp dữ liệu. Khi bạn tạo chỉ mục DUY NHẤT trên một cột trong bảng, nó không cho phép các giá trị trùng lặp.

Cú pháp

Sau đây là cú pháp tạo một chỉ mục duy nhất.

CREATE UNIQUE INDEX index_name on table_name (column_name);

Thí dụ

Ví dụ sau tạo một chỉ mục DUY NHẤT trên cột Id của bảng Nhân viên.

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

Khi bạn đã tạo một chỉ mục duy nhất trên một cột, bạn không thể nhập các giá trị tương tự cho cột đó trong một hàng khác. Tóm lại, một cột có chỉ mục UNIQE sẽ không cho phép các giá trị trùng lặp.

Chèn một hàng trong bảng Emp như hình dưới đây

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

Vì chúng tôi đã tạo một chỉ mục duy nhất trên cột Phone_No, nếu bạn nhập giá trị giống như trong bản ghi trước đó, nó sẽ hiển thị lỗi.

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

Tạo chỉ mục COMPOSITE

Bạn có thể tạo một chỉ mục duy nhất trên hai hàng và nó được gọi là Chỉ mục tổng hợp.

Cú pháp

Sau đây là cú pháp của chỉ mục tổng hợp.

CREATE INDEX index_name on table_name (column_name1, column_name2);

Thí dụ

Chỉ mục sau tạo chỉ mục tổng hợp trên các cột Tên và Vị trí.

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

Hiển thị các chỉ mục

Truy vấn SHOW INDEXES hiển thị danh sách các chỉ mục trên bảng.

Cú pháp

Sau đây là cú pháp của câu lệnh SHOW INDEXES:

SHOW INDEXES FROM table_name;

Thí dụ

Ví dụ sau, tôi hiển thị các chỉ mục trên bảng Nhân viên.

ij> SHOW INDEXES FROM Emp;

Điều này tạo ra kết quả sau.

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

Giảm chỉ số

Câu lệnh Drop Index xóa / giảm chỉ mục đã cho trên một cột.

Cú pháp

Sau đây là cú pháp của câu lệnh DROP INDEX.

DROP INDEX index_name;

Thí dụ

Ví dụ sau loại bỏ một chỉ mục có tên composite_index và unique_index đã tạo ở trên.

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

Bây giờ, nếu bạn xác minh danh sách các chỉ mục, bạn có thể thấy chỉ mục trên một cột vì chúng tôi đã xóa phần còn lại.

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

Xử lý các chỉ mục bằng chương trình JDBC

Chương trình JDBC sau đây trình bày cách tạo chỉ mục thả trên một cột trong bảng.

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

Đầu ra

Khi thực thi, điều này tạo ra kết quả sau

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