Tham khảo: use-the-index-luke
- Primary Keys
Employees table
CREATE TABLE employees (
employee_id NUMBER NOT NULL,
first_name VARCHAR2(1000) NOT NULL,
last_name VARCHAR2(1000) NOT NULL,
date_of_birth DATE NOT NULL,
phone_number VARCHAR2(1000) NOT NULL,
CONSTRAINT employees_pk PRIMARY KEY (employee_id)
)
ví dụ câu select sau lấy ra tên nhân viên
SELECT first_name, last_name
FROM employees
WHERE employee_id = 123
vì primary key là duy nhất nên DB ko cần phải tìm ở Leaf Node, chỉ cần duyệt index tree (INDEX UNIQUE SCAN )
sau khi tìm ra index thì DB cần làm 1 step nữa để lấy data ra
đó là thao tác: TABLE ACCESS BY INDEX ROWID
v/đ performance chậm có thể xảy ra ở bước này
Primary Keys without Unique Index
1 khóa chính ko nhất thiết phải là 1 index duy nhất (unique index)
bạn cũng có thể sd 1 non-unique index
trong case này thì Oracle DB sẽ ko sd INDEX UNIQUE SCAN thay vào đó nó sẽ dùng INDEX RANGE SCAN
một lý do cho việc sd non-unique index cho 1 primary key là Deferrable Constraints (các ràng buộc bị hoãn (bị trễ))
các Deferrable Constraints sẽ đc validate sau khi transaction commit, các ràng buộc thông thường sẽ validate luôn trong quá trình thực thi câu query.
Deferred constraints đc y/c for inserting data into tables with circular dependencies (các phụ thuộc vòng tròn).
- Concatenated Indexes
nếu table có nhiều primary key, thì DB cũng sẽ tự tạo index cho các column này
note: thứ tự index's column a/h rất lớn đến hiệu năng
ex: case sáp nhập cty, Cty tổng có bảng nhân viên với employeeID là primary key,
giờ sáp nhập thêm 1 cty con vào thì ID của nhân viên lúc này sẽ duplicate
-> ta cần thêm 1 cột ID nữa để phân biệt, subEmployeeID chẳng hạn
lúc này query: SELECT first_name, last_name
FROM employees
WHERE employee_id = 123
AND subsidiary_id = 30
-> DB vẫn là: INDEX UNIQUE SCAN, bất kể có bao nhiêu cột đc đánh index.
Nhưng nếu:
SELECT first_name, last_name
FROM employees
WHERE subsidiary_id = 20
Thì mọi chuyện lại khác: case này thì DB sẽ thực thi: TABLE ACCESS FULL
DB xét mỗi column dựa vào thứ tự của nó để sort the index entries,
column đầu tiên là tiêu chí sắp xếp chính, và column thứ hai chỉ xác định thứ tự if two entries have the same value in the first column and so on.
-> A concatenated index is one index across multiple columns.
- Trong thực tế việc chọn index này trường nào nên trước nên được đánh giá cẩn thận để chọn được đúng thứ tự mà hay được sử dụng nhất
- The fewer indexes a table has, the better the insert, delete and update performance.
thelam92
0 nhận xét:
Đăng nhận xét