Đặc điểm của Index: ✓ Là một đối tượng trong Database cơ sở dữ liệu, được định nghĩa trên cột của bảng.. 9 - Nếu từ khóa NOSORT được sử dụng khi dữ liệu không được sắp xếp trong trường
Trang 1Giới thiệu về chỉ mục (Index) trong Oracle
Trong bài này sẽ hướng dẫn tổng quan về Index trong Oracle Bên cạnh đó, trong bài này có hướng dẫn cách tạo, xóa và sửa Index Hướng dẫn cách cấp phát và thu hồi không gian lưu trữ của Index
Trang 22
MỤC LỤC
MỤC LỤC 2
I Tổng quan về Index trong Oracle: 4
I.1 Giới thiệu: 4
I.2 Đặc điểm của Index: 4
I.3 Các kiểu Index: 4
I.3.1 B-tree Index và một số biến thể của B-tree Index: 4
I.3.2 Bitmap Index: 5
I.3.3 Các loại Index đặc biệt khác: 5
I.4 Công dụng: 6
II Cách tạo, sửa, xóa các loại Index dùng câu lệnh: 6
II.1 Tạo index: 6
II.1.1 Single Column / Concatenated Index: 6
II.1.2 Nonunique / Unique Index: 10
II.1.3 Function-based Index: 12
II.1.4 Partitioned / Nonpartitioned Index: 16
II.1.5 Bitmap Index: 23
II.2 Sửa Index: 26
II.2.1 Thiết lập Storage Characteristics (đặc điểm lưu trữ) cho index: 27
II.2.2 Xây dựng lại (Rebuild) các index: 27
II.2.3 Ẩn/Hiện index: 29
II.2.4 Đổi tên index: 30
II.2.5 Bật/Tắt cơ chế giám sát của index: 31
II.3 Xóa Index: 33
III Cách tạo, sửa, xóa Index trực tiếp trên SQL Developer: 34
III.1 Tạo index trên SQL Developer: 34
III.2 Xem và sửa các index đã tạo trong bảng: 41
Trang 33
III.3 Xóa index đã tạo: 42
IV Mối quan hệ giữa Index và tham số PTCFREE: 43
V Cấp phát (allocate) và thu hồi (deallocate) không gian lưu trữ cho Index: 45
V.1 Cấp phát (allocate) không gian lưu trữ cho Index: 45
V.2 Thu hồi (deallocate) không gian lưu trữ của Index: 46
VI Các Storage parameters cho Index: 47
VII Khử phân mảnh (Coalescing) cho Index: 48
VII.1 Kiểm tra phân mảnh: 48
VII.2 Coalescing cho index: 48
VIII Xem thông tin Index: 50
IX DATABASE DEMO: 58
IX.1 DEMO CHO PARTITION INDEX: 58
IX.2 DEMO CHO CÁC VÍ DỤ: 59
TÀI LIỆU THAM KHẢO 61
Trang 44
I Tổng quan về Index trong Oracle:
I.1 Giới thiệu:
Index (Chỉ mục) là một cấu trúc cơ sở dữ liệu cung cấp - một phương pháp điều
chỉnh hiệu suất cho phép truy xuất vào bản ghi nhanh hơn trong một cột hoặc nhiều cột Nói cách khác, Index chứa giá trị của một trường nhất định trong một bảng dữ liệu, đồng thời trỏ đến dòng dữ liệu tương ứng
I.2 Đặc điểm của Index:
✓ Là một đối tượng trong Database (cơ sở dữ liệu), được định nghĩa trên cột của bảng
✓ Lưu trữ riêng lẻ với bảng, có thể tạo và xóa nhưng không ảnh hưởng đến bảng
✓ Khi bảng bị drop (hủy) thì Index cũng bị hủy theo
✓ Index được tổ chức với nhiều loại Index khác nhau
✓ Mục đích lớn nhất của Index là hỗ trợ tăng hiệu suất khi truy vấn dữ liệu
I.3 Các kiểu Index:
I.3.1 B-tree Index và một số biến thể của B-tree Index:
❖ B-tree Index:
- Là tổ chức Index mặc định trong Oracle Database
- Dựa trên nguyên lý balanced tree (cây cân bằng)
- Dữ liệu trong column có tính high cardinality (phân biệt cao) thì phương thức Index càng hiệu quả
- Phù hợp trong hầu hết các trường hợp trên database, nhất là OLTP (On-line Transactional Processing - Xử lý giao dịch trực tuyến) database
❖ Index-Organized Table (IOT): lưu dữ liệu khóa chính và dữ liệu cột không khóa
trong cùng cấu trúc B-tree Thực tế, dữ liệu được lưu trữ trong Primary Key Index (chỉ mục khóa chính)
❖ Unique Index: đảm bảo không có giá trị trùng lặp, dùng cho khóa chính và
Unique Key Constraint (ràng buộc khóa duy nhất)
Trang 55
❖ Reverse Key Index (chỉ mục khóa ngược): giúp giảm tải I/O trong trường hợp
bảng được Insert (chèn) quá nhiều dữ liệu
❖ Key Compressed Index (chỉ mục nén khóa): nén Index trong trường hợp tạo
Index trên nhiều column (Concatenated Index), và column đứng đầu thường có các giá trị lặp lại
❖ Descending Index (chỉ số giảm dần): Đảo ngược thứ tự sắp xếp B-tree Index
được xếp theo thứ tự tăng dần và Descending Index đảo ngược thứ tự lại
Ví dụ: B-tree Index trên column STT thì số nhỏ nhất sẽ là node lá ngoài cùng
bên trái, khi thiết lập Descending Index thì thứ tự bị đảo ngược lại)
I.3.2 Bitmap Index:
❖ Sử dụng các bit arrays để lưu trữ Index
❖ Dữ liệu trong column càng ít phân biệt (Low Cardinality) thì Index càng tốt
❖ Phù hợp hơn trên môi trường Data Warehouse (kho dữ liệu)
I.3.3 Các loại Index đặc biệt khác:
❖ Bitmap Join Index: lưu trữ kết quả liên kết 2 bảng
❖ Function-Based Index: lập chỉ mục 1 column nằm trong hàm hay biểu thức tính
toán
❖ Indexed Virtual Column: tạo chỉ mục trên Virtual Column
❖ Virtual Index: tạo Index ảo, dùng để kiểm tra xem có sử dụng được không trước
khi tạo thật
❖ Invisible Index: ẩn Index đi, dùng để kiểm tra xem index có được sử dụng không
trước khi xóa
❖ Global Partitioned Index: Index được partition không phụ thuộc vào table
❖ Local Partitioned Index: Index được partition phụ thuộc vào partition table
❖ Domain Index: dùng trên các loại dữ liệu đặc biệt
❖ B-tree Cluster, Hash Cluster Index: dùng trên Cluster Table
Trang 66
I.4 Công dụng:
Index giúp tăng tốc các truy vấn SELECT chứa các mệnh đề WHERE hoặc ORDER, nhưng nó làm chậm việc dữ liệu nhập vào với các lệnh UPDATE và INSERT Các chỉ mục có thể được tạo hoặc xóa mà không ảnh hưởng tới dữ liệu
II Cách tạo, sửa, xóa các loại Index dùng câu lệnh:
II.1 Tạo index:
II.1.1 Single Column / Concatenated Index:
II.1.1.1 Single Column Index:
❖ Cú pháp:
Single Column Index được tạo cho duy nhất 1 cột trong bảng Cú pháp cơ bản như
sau:
CREATE INDEX index_name
ON table_name (column_name [ ASC | DESC ])
+ index_name: tên của index
+ table_name: tên bảng tạo index
+ column_name: tên cột tạo index
+ ASC/DESC: được cung cấp để tương thích về cú pháp cho database khác + TABLESPACE: tên tablespace mà Index sẽ được tạo trên đó
Trang 77
+ PCTFREE: không gian dành riêng trong mỗi block, được sử dụng khi một có
điểm vào mới của Index (New Entries) được tạo ra
+ INITRANS: chỉ định số giao dịch thiết lập ban đầu cho mỗi block
+ MAXTRANS: giới hạn số giao dịch có thể thiết lập cho mỗi block (giá trị mặc
định là 255)
+ STORAGE: tham số lưu trữ, quy định có bao nhiêu extents sẽ cấp phát cho
Index
+ LOGGING: chỉ định việc tạo các Index và các hoạt động tuần tự trên trên Index
sẽ được ghi vào trong các Redo Log File
+ NOLOGGING: chỉ định việc tạo và các hoạt động tuần tự trên Index không
được ghi vào các Log File
+ NOSORT: chỉ hoạt động khi các row được lưu trong database đã được sắp xếp
theo thứ tự tăng dần
❖ Ví dụ 1: Tạo Index trên cột TenNV trong bảng NHANVIEN
CREATE INDEX Index_NV_TenNV
Trang 88
Kết quả thực thi:
Trong đó:
+ INITIAL: Phạm vi lưu trữ phân bổ ban đầu
+ NEXT: Phạm vi phân bổ tiếp theo (nếu không có thì phạm vi phân bổ tiếp theo
sẽ có kích thước mặc định bằng phạm vi phân bổ gần nhất cộng với giá trị PCTINCREASE)
+ PCTINCREASE: Tỷ lệ phần trăm của mỗi phạm vi phân bổ tiếp theo
❖ Chú ý:
- Nếu giá trị của MINIMUM EXTENT đã được định nghĩa cho tablespace, kích
thước của extent dùng cho Index sẽ được làm tròn lên thành một bội số lần giá
trị của MINIMUM EXTENT
- Nếu mệnh đề [NO]LOGGING bị bỏ qua, thuộc tính log của Index mặc định sẽ
phụ thuộc vào thuộc tính log của tablespace mà Index được tạo trên đó
- PCTUSED không được chỉ định cho Index, vì các điểm vào Index phải được
lưu trữ theo một trật tự nhất định, người dùng không được phép điều khiển khi một Index block được sử dụng cho việc Insert
Trang 99
- Nếu từ khóa NOSORT được sử dụng khi dữ liệu không được sắp xếp trong
trường khóa thì câu lệnh sẽ kết thúc với một lỗi, lỗi này giống như việc thực hiện nhiều câu lệnh DML trên bảng
II.1.1.2 Concatenated Index:
❖ Cú pháp:
Concatenated Index là chỉ mục kết hợp dành cho hai hoặc nhiều cột trong một
bảng Cú pháp cơ bản của nó như sau:
CREATE INDEX index_name
+ column_name1, column_name2, là danh sách các cột tạo index
❖ Ví dụ 2: Tạo Index trên các cột HoNV, TenLot, TenNV trong bảng NHANVIEN CREATE INDEX Index_NV_HoNV_TenLot_TenNV
ON NHANVIEN (HoNV, TenLot, TenNV)
PCTFREE 30
TABLESPACE Index01;
Trang 1010
Kết quả thực thi:
II.1.1.3 Sử dụng Single Column / Concatenated Index:
- Việc tạo Single Column Index hay Concatenated Index tùy thuộc vào tần suất
sử dụng mệnh đề WHERE của truy vấn dưới dạng điều kiện bộ lọc
- Nếu chỉ có một cột được sử dụng, thì lựa chọn tốt nhất là Single Column Index
- Nếu có hai hoặc nhiều cột được sử dụng thường xuyên trong mệnh đề WHERE như là các bộ lọc thì dạng chỉ mục Concatenated Index là lựa chọn tối ưu hơn II.1.2 Nonunique / Unique Index:
II.1.2.1 Nonunique Index:
- Non-Unique Index là chỉ mục được mặc định trong hệ thống
- Non-Unique Index cho phép chèn các giá trị trùng lặp trong cột được lập chỉ mục
II.1.2.2 Unique Index:
❖ Cú pháp:
Unique Index là chỉ mục duy nhất, được sử dụng để tăng hiệu suất và đảm bảo
tính toàn vẹn dữ liệu Một chỉ mục Unique không cho phép chèn bất kỳ giá trị trùng lặp nào được chèn vào bảng
Trang 1111
Cú pháp cơ bản như sau:
CREATE UNIQUE INDEX index_name
ON table_name (column_name [ ASC | DESC ])
Trang 12❖ Ví dụ 4: Tạo index trên LuongCB, LuongThuong và TongLuong = LuongCB +
LuongThuong Để tăng hiệu suất câu truy vấn: Liệt kê danh sách các nhân viên có
tổng lương trên 6 triệu
CREATE INDEX index_tongluong
ON NHANVIEN (
LuongCB + LuongThuong,
LuongCB, LuongThuong );
SELECT
MaNV, HoNV || ' ' || TenLot || ' ' || TenNV
AS HoTen, LuongCB + LuongThuong AS TongLuong
FROM NHANVIEN WHERE (LuongCB + LuongThuong) >
6000000
ORDER BY TongLuong DESC;
Trang 1313
Kết quả thực thi câu truy vấn:
Kết quả hiệu suất câu lệnh chưa chạy Index:
Trang 1414
Kết quả hiệu suất câu lệnh sau khi chạy Index:
❖ Ví dụ 5: Tạo một Index sử dụng hàm UPPER trên cột TenPB trong bảng PHONGBAN Câu truy vấn sau là 1 ví dụ sử dụng chỉ mục dựa trên chức năng
CREATE INDEX
index_tenphongban ON
PHONGBAN( UPPER (TenPB));
SELECT * FROM PHONGBAN WHERE UPPER(TenPB) = 'KE TOAN';
Trang 1515
Kết quả thực thi truy vấn:
Kết quả hiệu suất câu lệnh chưa chạy Index:
Trang 1616
Kết quả hiệu suất câu lệnh sau khi chạy Index:
II.1.4 Partitioned / Nonpartitioned Index:
II.1.4.1 Đặc điểm của Partition:
❖ Range Partitioning (Phân vùng phạm vi):
Trang 1717
➢ Giải thích:
- Giá trị khóa phân vùng phạm vi (Partitioning Key: time_id) xác định giá trị cao
của các phân vùng phạm vi, được gọi là Điểm chuyển tiếp (Transition Point)
Ví dụ: Ở Phân vùng SALES_1998, time_id = '01-JAN-1999' là giá trị lớn nhất
Nghĩa là các dòng dữ liệu nào nhỏ hơn giá trị '01-JAN-1999' sẽ được “chia” vào phân vùng này
- Cơ sở dữ liệu sẽ tạo ra những Khoảng phân vùng (Interval Partitions) để chứa
những dòng dữ liệu vượt quá Điểm chuyển tiếp Các Khoảng phân vùng có thể
mở rộng phạm vi phân vùng bằng cách hướng dẫn cơ sở dữ liệu tạo ra những phân vùng được xác định phạm vi hoặc khoảng chỉ định tự động khi dữ liệu được chèn vào vượt quá tất cả các phạm vi phân vùng
Ví dụ: Ở Phân vùng SALES_2001, time_id = MAXVALUE Nghĩa là các dòng dữ
liệu nào lớn hơn hoặc bằng giá trị '01-JAN-2001' (giá trị này chính là Partitioning Key của Partition trước) sẽ được “chia” vào phân vùng này
❖ List Partitioning (Phân vùng danh sách):
Trang 1818
➢ Giải thích:
Cơ sở dữ liệu sử dụng danh sách các giá trị rời rạc làm Khóa phân vùng phạm
vi (Partitioning Key: channel_id) Có thể sử dụng cách phân vùng này để kiểm soát cách các hàng dữ liệu riêng lẻ “đi vào” các phân vùng cụ thể Với cách phân vùng này, có thể nhóm và sắp xếp các bộ dữ liệu liên quan khi khóa được sử dụng để xác định chúng không được sắp xếp thuận tiện
Trang 1919
➢ Giải thích:
Cơ sở dữ liệu ánh xạ các hàng thành các phân vùng dựa trên thuật toán băm mà
cơ sở dữ liệu áp dụng cho Khóa phân vùng (Partitiong Key: prod_id) do người dùng chỉ định
➢ Ưu điểm:
- Hữu ích trong việc phân vùng các bảng dữ liệu lớn để tăng khả năng quản lý
- Sự cố xảy ra trên 1 phân vùng băm không ảnh hưởng các phân vùng băm còn lại
Trang 2020
- Khi các hàng dữ liệu được chèn vào, cơ sở dữ liệu sẽ cố gắng phân phối ngẫu nhiên và đồng đều các hàng dữ liệu trên các phân vùng
- Không thể chỉ định phân vùng theo ý muốn
- Khi thay đổi số lượng phân vùng băm, toàn bộ cơ sở dữ liệu sẽ được phân phối lại trên các phân vùng băm
II.1.4.2 NonPartitioned Index:
❑ NonPartition Index có thể được tạo trên Partitioned/NonPartitioned Tables, nhưng chủ yếu được sử dụng trên NonPartition Table
❑ Trong Oracle, chỉ hỗ trợ Global NonPartitioned Index Khi có thay đổi về phân
vùng mà chỉ mục này tham chiếu tới, thì chỉ mục sẽ không còn tác dụng, phải xây dựng lại nếu có nhu cầu sử dụng
II.1.4.3 Partitioned Index:
- Partitioned Index dùng cho các table lớn, lưu các mục Index (Index Entries)
của Index này có thể nằm trên nhiều segments
- Việc phân khu sẽ cho phép một index có thể trải rộng trên nhiều tablespaces, giảm bớt tình trạng quá tải khi index được truy xuất và quản lý
- Các Partitioned Index hay được sử dụng cùng với các Partitioned Table để
tăng cường hiệu năng và dễ quản lý Partitioned Index sẽ được tạo ra ứng với mỗi Partitioned Table
- Partitioned Index: bao gồm Local Partitioned Index và Global Partitioned Index
Trang 2121
Local Partitioned Index:
o Chỉ mục được phân vùng trên cùng một cột, có cùng số lượng phân vùng và cùng giới hạn phân vùng với bảng của nó
o Mỗi phân vùng chỉ mục được liên kết với chính xác một phân vùng của bảng, sao cho tất cả các khóa trong phân vùng chỉ mục chỉ tham chiếu đến các hàng được lưu trữ trong một phân vùng bảng duy nhất
o Cơ sở dữ liệu sẽ tự động đồng bộ hóa các phân vùng chỉ mục với các phân vùng bảng được liên kết của chúng, làm cho mỗi cặp chỉ mục bảng trở nên độc lập
❖ Ưu điểm:
+ Tính khả dụng được tăng lên vì các hành động làm cho dữ liệu không hợp lệ hoặc không có sẵn trong một phân vùng chỉ ảnh hưởng đến phân vùng này + Đơn giản trong việc bảo trì phân vùng
+ Trong trường hợp xảy ra PITR (Point-in-time Recovery), các chỉ mục này
có thể tự động phục hồi, không cần phải xây dựng lại
❖ Cú pháp:
CREATE INDEX index_name
ON table_name (column_name) LOCAL;
Trong đó:
Thuộc tính LOCAL chỉ thị đây là 1 Local Partitioned Index
❖ Minh họa:
Trang 2222
Global Partitioned Index:
o Là một chỉ mục B-tree được phân vùng độc lập với bảng mà nó được tạo
o Global Index có thể được phân vùng theo phạm vi hoặc theo hàm băm
o Nếu được phân vùng theo phạm vi: cơ sở dữ liệu sẽ phân vùng chỉ mục chung trên phạm vi giá trị từ các cột trong bảng chỉ định trong danh sách cột
o Nếu được phân vùng theo hàm băm: cơ sở dữ liệu sẽ gán các hàng cho các phân vùng bằng cách sử dụng hàm băm trên các giá trị trong các cột khóa phân vùng
Trang 23+ Phân vùng chỉ mục p3 trỏ đến các hàng có channel_id = 4 hoặc 9
II.1.5 Bitmap Index:
II.1.5.1 Giới thiệu về Bitmap:
Bitmap Index (Index theo kiểu ánh xạ bits) là một kiểu index hay được sử dụng trong một số trường hợp sau:
• Khi table có nhiều row và các thuộc tính được đặt index có số giá trị khác biệt nhau rất ít
Ví dụ: Bitmap Index thích hợp hơn đối với các cột giới tính (Nam hay Nữ)
• Khi truy vấn có kết hợp sử dụng nhiều mệnh đề trong phần điều kiện WHERE Mệnh đề truy vấn sử dụng các phép toán logic OR
• Khi các thuộc tính cần đặt index là read-only (chỉ đọc) hay có rất ít hành động cập nhật trên các cột đó
II.1.5.2 Cấu trúc của Bitmap:
Là một cách tổ chức khác của Index Một Bitmap Index cũng được tổ chức theo
kiểu B-Tree, nhưng mỗi node lá lại chứa một bitmap (lược đồ ánh xạ bit) đối với mỗi giá trị khóa Trong một chỉ mục bitmap, Oracle lưu trữ một bitmap cho mỗi khóa chỉ mục Mỗi khóa chỉ mục lưu trữ trỏ đến nhiều hàng
Trang 2424
II.1.5.3 Sử dụng Bitmap Index:
- Bitmap-TREE index sử dụng để thiết lập phần lá của các node, phần này sẽ chứa đoạn bitmap được sử dụng để xác định hàng chứa giá trị khoá
- Khi có thay đổi trên các cột khóa trong table, các chuỗi bitmap cần được thay đổi theo Kết quả là sẽ sinh ra các khoá trên các bitmap segment liên quan do quá trình phân đoạn các khoá này đòi hỏi thực hiện trên toàn bộ bitmap segment Một row quản lý bởi bitmap sẽ không thể cập nhật bởi các transaction khác đến khi transaction đầu kết thúc
II.1.5.4 Tạo Bitmap Index:
❖ Cú pháp:
CREATE BITMAP INDEX index_name
ON table_name (column_name [ ASC | DESC ])
❖ Một số yêu cầu và giới hạn về Bitmap Index:
- Chỉ một bảng có thể cập nhật bởi các giao dịch khác nhau khi sử dụng chỉ mục Bitmap
- Mỗi bảng chỉ xuất hiện 1 lần trong khi tham gia
- Bạn không thể tạo Bitmap Index trên bảng tạm thời
Trang 2525
❖ Ví dụ: Tạo Bitmap index trên giới tính trong bảng NHANVIEN
CREATE BITMAP INDEX index_NV_GioiTinh
ON NHANVIEN (GioiTinh) PCTFREE 20
STORAGE (INITIAL 100K NEXT 100K PCTINCREASE 0 MAXEXTENTS 50) TABLESPACE Index01;
Kết quả thực thi:
II.1.5.5 So sánh giữa B-TREE Index và Bitmap Index:
Bảng so sánh giữa B-TREE và Bitmap Index:
Thích hợp với các cột dữ liệu trên tập giá
Trang 26- Bảng trên đây so sánh giữa B-TREE và Bitmap Index, Bitmap index được sử
dụng nhiều hơn trong trường hợp các cột có giá trị khác nhau rất ít
- Việc cập nhật các cột làm khóa trong Bitmap index thì sẽ chậm hơn bởi vì Bitmap index sử dụng phương pháp khoá đoạn bitmap (bitmap segment level locking), trong khi đó trong một B-TREE index khoá thực hiện trên các điểm vào tương ứng với từng row riêng lẻ trên table
- Bitmap index có thể thực hiện các hoạt động với các toán hạng logic OR Khi đó Oracle Server sử dụng hai phân đoạn bitmap để thực hiện việc so sánh từng bit trong toán hạng OR và trả về kết quả là một chuỗi Bitmap Tính chất này cho phép
sử dụng hiệu quả chuỗi Bitmap trong câu lệnh truy vấn có sử dụng toán hạng logic
II.2 Sửa Index:
Để sửa một index nào đó, điều kiện cần là index đó phải tồn tại trước đó Khi đó, chúng
ta mới xác định được đối tượng index nào mà chúng ta cần sửa Việc sửa index bao gồm:
➢ Thiết lập Storage Characteristics (đặc điểm lưu trữ) cho index
➢ Rebuild các index
➢ Ẩn/Hiện index
➢ Đổi tên index
➢ Bật/Tắt cơ chế giám sát index
Trang 2727
II.2.1 Thiết lập Storage Characteristics (đặc điểm lưu trữ) cho index:
Mục đích: Thay đổi các tham số lưu trữ của các chỉ mục để thực thi các ràng buộc toàn vẹn khóa chính (Primary Key) và khóa duy nhất (Unique Key)
Các thông số lưu trữ INITIAL và MINEXTENTS không thể thay đổi Tất cả các cài
đặt mới cho các tham số lưu trữ khác chỉ ảnh hưởng đến các phạm vi được phân bổ sau
đó cho chỉ mục
II.2.2 Xây dựng lại (Rebuild) các index:
❖ Mục đích của Rebuild index:
- Xây dựng một index mới trên cơ sở một index đã tồn tại
- Sắp xếp lại quá trình không cần thiết của một index trên một index đã tồn tại, kết quả cho ra là quá trình hiệu năng cao hơn
- Index cũ bị xóa đi sau khi một index mới được tạo Trong quá trình xây dựng lại index, không gian cần thiết là không gian cho cả index cũ và index mới khi được tạo thành
- Các truy vấn có thể tiếp tục sử dụng các index đang tồn tại trong khi các index mới đang được xây dựng
❖ Các tình huống có thể xây dựng lại index:
- Các index đang tồn tại cần được chuyển tới một tablespace mới, công việc này cần thiết khi các index ở trong cùng một tablespace vì các bảng hay các object khác cần phân tán trên nhiều đĩa
Trang 2828
- Một index chứa nhiều điểm vào bị xoá, hiện tượng này xảy ra với các index trượt
Ví dụ: Index trên trường Số thứ tự đặt hàng của bảng Đặt hàng Khi các đơn đặt
hàng đã hoàn thành sẽ bị xoá đi và một đơn đặt hàng mới được thêm vào trong bảng với số đặt hàng lớn hơn
- Một index thông thường cần chuyển đổi sang index với khoá ngược
+ ONLINE: Xây dựng lại index trực tuyến, cho phép bạn cập nhật các bảng cơ sở
cùng lúc với việc bạn đang xây dựng lại
+ Dùng PARTITION: Khi Index bị đánh Partition
Câu lệnh Rebuild index không thể dùng để chuyển đổi một Bitmap index thành một B-Tree và ngược lại Các mệnh đề REVERSE (Ngược) và NOREVERSE (Không thay đổi) chỉ sử dụng với B-tree index
❖ Ví dụ:
ALTER INDEX Index_NV_TenNV REBUILD
TABLESPACE Index02;
Trang 30WHERE INDEX_NAME = ‘Index_NV_TenNV’ ;
II.2.4 Đổi tên index: