1. Trang chủ
  2. » Tất cả

Index in Oracle

61 2 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 61
Dung lượng 2,12 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Đặ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 1

Giớ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 2

2

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 3

3

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 4

4

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 5

5

❖ 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 6

6

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 7

7

+ 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 8

8

 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 9

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 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 10

10

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 11

11

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 13

13

 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 14

14

 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 15

15

 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 16

16

 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 17

17

➢ 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 18

18

➢ 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 19

19

➢ 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 20

20

- 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 21

21

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 22

22

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 24

24

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 25

25

❖ 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 27

27

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 28

28

- 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 30

WHERE INDEX_NAME = ‘Index_NV_TenNV’ ;

II.2.4 Đổi tên index:

Ngày đăng: 16/02/2022, 14:23