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