Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Chỉ mục Oracle và các loại chỉ mục trong oracle với ví dụ

Chúng ta sẽ thảo luận về các chỉ mục / loại chỉ mục của Oracle trong oracle với ví dụ trong bài đăng này. Tôi sẽ xem xét tất cả các tùy chọn về cách tạo chỉ mục trong oracle. Tôi cũng sẽ thảo luận về cách kiểm tra kích thước chỉ mục trong oracle. Tôi hy vọng bạn sẽ thích bài viết này. Tôi sẽ mong nhận được phản hồi về bài đăng này

Chỉ mục Oracle là gì?

  • Giống như chúng tôi có chỉ mục trong sách giáo khoa để giúp chúng tôi tìm chủ đề cụ thể trong sách, chỉ mục Oracle hoạt động theo cùng một cách. chúng tôi có các loại chỉ mục khác nhau trong oracle.
  • Các chỉ mục được sử dụng để tìm kiếm các hàng trong bảng oracle một cách nhanh chóng. Nếu chỉ mục không có mặt, truy vấn chọn phải đọc toàn bộ bảng và trả về các hàng. Với Chỉ mục, các hàng có thể được truy xuất nhanh chóng
  • Chúng ta nên tạo Chỉ mục khi truy xuất một số lượng nhỏ hàng từ bảng. hoặc để truy xuất tập hợp các hàng đầu tiên càng nhanh càng tốt từ một số truy vấn mà cuối cùng sẽ trả về một số lượng lớn các hàng. Nó cũng phụ thuộc vào phân phối dữ liệu, tức là yếu tố phân nhóm
  • Các chỉ mục độc lập về mặt vật lý và logic với dữ liệu trong bảng liên kết.
  • Chỉ mục là cấu trúc tùy chọn được liên kết với các bảng và cụm. Bạn có thể tạo chỉ mục trên một hoặc nhiều cột của bảng để tăng tốc độ thực thi câu lệnh SQL trên bảng đó.
  • Chỉ mục là phương tiện chính để giảm I / O của đĩa khi được sử dụng đúng cách.
  • Ngay từ đầu, truy vấn quyết định có sử dụng chỉ mục hay không
  • Điều tốt nhất với các chỉ mục là hiệu suất truy xuất dữ liệu được lập chỉ mục hầu như không đổi, ngay cả khi các hàng mới được chèn vào. Tuy nhiên, sự hiện diện của nhiều chỉ mục trên một bảng sẽ làm giảm hiệu suất cập nhật, xóa và chèn vì Oracle cũng phải cập nhật các chỉ mục được liên kết với bảng.
  • Nếu bạn là chủ sở hữu của bảng, bạn có thể tạo chỉ mục hoặc nếu bạn muốn tạo chỉ mục cho bảng trong một lược đồ khác thì bạn phải có đặc quyền TẠO BẤT KỲ CHỈ SỐ hệ thống hoặc đặc quyền chỉ mục nào trên bảng đó

Loại chỉ mục logic

Nó xác định các đặc điểm ứng dụng của Chỉ mục

Duy nhất hoặc Không Duy nhất Một chỉ mục có thể là Duy nhất hoặc không Duy nhất. Oracle tạo chỉ mục duy nhất cho khóa chính và các ràng buộc khóa duy nhất
Nếu các chỉ mục không phải duy nhất đã có trên cột đó, nó sẽ không tạo chỉ mục duy nhất mới cho khóa chính trong Oracle
Kết hợp Chỉ mục có thể bao gồm một hoặc nhiều cột. Chỉ mục tổng hợp có thể tăng tốc độ truy xuất dữ liệu cho các câu lệnh SELECT trong đó mệnh đề WHERE tham chiếu đến tất cả hoặc phần đầu của các cột trong chỉ mục tổng hợp.
Chỉ mục dựa trên chức năng Dữ liệu của cột được lập chỉ mục dựa trên một phép tính
Chỉ mục miền ứng dụng Chỉ mục này được sử dụng trong các ứng dụng đặc biệt (Không gian, Văn bản).

Cột ROWID Pseudo là gì

ROWID trả về địa chỉ của mỗi hàng trong bảng. Oracle chỉ định ROWID cho mỗi hàng .ROWID bao gồm các thành phần sau

  • Số đối tượng dữ liệu của đối tượng
  • Khối dữ liệu trong tệp dữ liệu chứa hàng
  • Vị trí của hàng trong khối dữ liệu (hàng đầu tiên là 0)
  • Tệp dữ liệu chứa hàng (tệp đầu tiên là 1). Số tệp có liên quan đến không gian bảng.

Oracle sử dụng ROWID nội bộ để truy cập các hàng. Ví dụ:Oracle lưu trữ ROWID trong chỉ mục và sử dụng nó để truy cập vào hàng trong bảng.

Bạn có thể hiển thị ROWID của các hàng bằng lệnh SELECT như sau:

chọn rowid, emp_name từ emp;

ROWID EMP_NAME

AAADC576474722aSAAA John

Oracle cung cấp một gói có tên DBMS_ROWID để giải mã ROWID.

Sau khi một hàng được gán ROWID Oracle không thay đổi ROWID trong suốt thời gian tồn tại của hàng. Nhưng nó thay đổi khi bảng được xây dựng lại Khi các hàng được di chuyển qua phân vùng hoặc thu nhỏ bảng

Các loại chỉ mục trong oracle với ví dụ

Có 6 loại chỉ mục khác nhau trong oracle

(1) Cây B

(2) Cây B nén

(3) Bản đồ bit

(4) Dựa trên chức năng

(5) Phím đảo ngược (RKI)

(6) Bảng tổ chức chỉ mục (IOT).

Hãy cùng tìm hiểu chi tiết từng loại và cách tạo chỉ mục trong oracle cho từng loại này

B - Chỉ mục cây:

  • Chỉ mục B-Tree (cây cân bằng) là loại chỉ mục phổ biến nhất.
  • Chỉ mục B-Tree đã lưu trữ ROWID và giá trị khóa chỉ mục trong cấu trúc cây.
  • Khi tạo chỉ mục, khối ROOT sẽ được tạo, sau đó khối BRANCH được tạo và cuối cùng là khối LEAF.
  • Mỗi nhánh nắm giữ phạm vi dữ liệu mà các khối lá của nó nắm giữ và mỗi nhánh chứa phạm vi dữ liệu mà các nhánh của nó nắm giữ:
  • Chỉ mục B-Tree hữu ích nhất trên các cột xuất hiện trong mệnh đề where (SELECT… WHERE EMPNO =1).
  • Máy chủ Oracle, giữ cho cây cân bằng bằng cách chia nhỏ các khối chỉ mục, khi dữ liệu mới được chèn vào bảng.
  • Bất cứ khi nào một câu lệnh DML được thực hiện trên bảng của chỉ mục, hoạt động lập chỉ mục sẽ xảy ra, làm cho chỉ mục phát triển (thêm lá và cành).

Ưu điểm

  • Tất cả các khối lá của cây đều có độ sâu như nhau.
  • Các chỉ mục B-tree tự động giữ cân bằng.
  • Trung bình tất cả các khối của cây B có đầy đủ ba phần tư.
  • B-tree mang lại hiệu suất truy xuất tuyệt vời cho nhiều loại truy vấn, bao gồm cả tìm kiếm đối sánh chính xác và tìm kiếm theo phạm vi.
  • Chèn, cập nhật và xóa hiệu quả, duy trì thứ tự chính để truy xuất nhanh.
  • Hiệu suất B-tree tốt cho cả bảng nhỏ và bảng lớn, đồng thời không suy giảm khi kích thước của bảng lớn lên.
CREATE <UNIQUE|NON UNIQUE>  INDEX <index_name>
ON <table_name> (<column_name>,<column_name>…)
TABLESPACE <tablespace_name>;

Example
Create index   scott.exp_idx   on table scott.example(  name)
Tablespace TOOLS;

Chỉ mục cây B được nén là gì

  • Chỉ mục B-Tree được nén được xây dựng trên các bảng lớn, trong môi trường kho dữ liệu. Trong loại chỉ mục này, các trường hợp trùng lặp của cùng một giá trị được loại bỏ, do đó làm giảm dung lượng lưu trữ mà chỉ mục yêu cầu.
  • Trong chỉ mục B-Tree được nén, đối với mỗi giá trị khóa, một danh sách ROWID được giữ lại
  • Việc chỉ định từ khóa COMPRESS khi tạo chỉ mục (CREATE INDEX… COMPRESS) sẽ tạo chỉ mục B-Tree được nén.
  • Chỉ mục B-Tree thông thường có thể được tạo lại bằng cách sử dụng từ khóa COMPRESS để nén nó.
CREATE <UNIQUE|NON UNIQUE>  INDEX <index_name>
ON <table_name> (<column_name>,<column_name>…)
PCTFREE <integer>
TABLESPACE <tablespace_name>
Compress  <column number>

Chỉ mục Bitmap là gì

  • Chỉ mục Bitmap thích hợp nhất trên dữ liệu bản số khác biệt thấp (trái ngược với chỉ mục B-Tree).
  • Loại chỉ mục này, tạo một bản đồ nhị phân của tất cả các giá trị chỉ mục và lưu trữ bản đồ đó trong các khối chỉ mục, điều này có nghĩa là chỉ mục sẽ yêu cầu ít không gian hơn chỉ mục B-Tree.
  • Mỗi bit trong bitmap tương ứng với một rowid có thể có. Nếu bit được đặt, thì có nghĩa là hàng có rowid tương ứng chứa giá trị khóa. Một hàm ánh xạ chuyển đổi vị trí bit thành một rowid thực tế, vì vậy chỉ mục bitmap cung cấp chức năng tương tự như một chỉ mục thông thường mặc dù nó sử dụng một cách biểu diễn khác trong nội bộ. Nếu số lượng các giá trị khóa khác nhau nhỏ, thì các chỉ mục bitmap rất hiệu quả về dung lượng
  • Khi có chỉ mục bitmap trên các bảng thì các bản cập nhật sẽ loại bỏ toàn bộ bảng. Vì vậy, chỉ mục Bitmap hữu ích trên các cột lớn có hoạt động DML thấp (cập nhật không thường xuyên) hoặc chỉ đọc các bảng. Đây là lý do bạn thường thấy chỉ mục bitmap được sử dụng rộng rãi trong môi trường kho dữ liệu (DWH).
  • Cấu trúc Bitmap Index chứa một bản đồ các bit cho biết giá trị trong cột, ví dụ:đối với cột GENDER, khối chỉ mục sẽ chứa ROWID bắt đầu, ROWID kết thúc và bản đồ bit:
  • Chỉ mục bitmap rất hữu ích khi được tạo trên các cột có số lượng thấp, được sử dụng với toán tử AND &OR trong điều kiện truy vấn:
CREATE BITMAP  INDEX <index_name>
ON <table_name> (<column_name>,<column_name>…)
PCTFREE <integer>
TABLESPACE <tablespace_name>

Ví dụ

CREATE BITMAP INDEX ON emp_data(gender);
SELECT COUNT(*) FROM emp_data
WHERE GENDER=’M”;

Ưu điểm của Chỉ mục Bitmap

  • Giảm thời gian phản hồi cho các lớp truy vấn lớn
  • Giảm đáng kể việc sử dụng không gian so với các kỹ thuật lập chỉ mục khác
  • Tăng hiệu suất đáng kinh ngạc ngay cả trên phần cứng rất thấp
  • DML song song rất hiệu quả và tải

Chỉ mục dựa trên chức năng

Chỉ mục dựa trên hàm là các chỉ mục được tạo trên các cột mà một hàm thường được áp dụng.

Khi sử dụng một hàm trên cột được lập chỉ mục, chỉ mục sẽ bị bỏ qua, do đó, chỉ mục dựa trên hàm rất hữu ích cho các hoạt động này.

CREATE INDEX <index_name>
ON <table_name> [ Function(<column_name>,<column_name.)]
TABLESPACE <tablespace_name>;

Example
CREATE INDEX EMP_IDX on EMP(UPPER(ENAME));
SELECT *
FROM Emp
WHERE UPPER(Ename) like ‘JOHN`;

Chỉ mục khóa ngược là gì

  • Chúng là các loại chỉ mục B-Tree đặc biệt và rất hữu ích khi được tạo trên các cột chứa các số liên tiếp.
  • Khi sử dụng B-Tree thông thường, chỉ mục sẽ phát triển thành nhiều nhánh và có thể là nhiều cấp, do đó gây ra suy giảm hiệu suất, RKI giải quyết vấn đề bằng cách đảo ngược các byte của mỗi khóa cột và lập chỉ mục dữ liệu mới.
  • Phương pháp này phân phối dữ liệu đồng đều trong chỉ mục. Việc tạo RKI được thực hiện bằng cách sử dụng từ khóa REVERSE:CREATE INDEX… ON… REVERSE;
CREATE INDEX <index_name>
ON <table_name> (<column_name>)
TABLESPACE <tablespace_name>
REVERSE;

Example

CREATE INDEX emp_idx i ON emp_table (firstname,lastname) REVERSE;

Bảng có tổ chức lập chỉ mục (IOT) là gì -

  • Khi chúng tôi sử dụng B-Tree, các chỉ mục khóa Bitmap và Đảo ngược được sử dụng cho các bảng lưu trữ dữ liệu theo kiểu không có thứ tự (Bảng đống).
  • Các chỉ mục này chứa vị trí ROWID của hàng trong bảng bắt buộc, do đó cho phép truy cập trực tiếp vào dữ liệu hàng
  • Một bảng được tổ chức theo chỉ mục khác với bảng thông thường vì dữ liệu cho bảng được giữ trong chỉ mục liên quan của nó. Các thay đổi đối với dữ liệu bảng, chẳng hạn như thêm hàng mới, cập nhật hàng hoặc xóa hàng, dẫn đến việc cập nhật chỉ mục.
  • Bảng được tổ chức theo chỉ mục giống như một bảng thông thường có chỉ mục trên một hoặc nhiều cột của nó, nhưng thay vì duy trì hai bộ lưu trữ riêng biệt cho bảng và chỉ mục B-tree, hệ thống cơ sở dữ liệu chỉ duy trì một B- chỉ mục cây chứa cả giá trị khóa được mã hóa và các giá trị cột được liên kết cho hàng tương ứng. Thay vì có rowid của hàng làm phần tử thứ hai của mục nhập chỉ mục, hàng dữ liệu thực tế được lưu trữ trong chỉ mục B-tree. Các hàng dữ liệu được tạo trên khóa chính của bảng và mỗi mục nhập chỉ mục cây B chứa . Các bảng được tổ chức theo chỉ mục phù hợp để truy cập dữ liệu bằng khóa chính hoặc bất kỳ khóa nào là tiền tố hợp lệ của khóa chính.
  • Không có sự trùng lặp các giá trị khóa vì chỉ các giá trị cột không phải khóa mới được lưu trữ cùng với khóa. Bạn có thể xây dựng các chỉ mục phụ để cung cấp khả năng truy cập hiệu quả bởi các cột khác. Các ứng dụng thao tác với bảng được tổ chức theo chỉ mục giống như một bảng thông thường, sử dụng các câu lệnh SQL. Tuy nhiên, hệ thống cơ sở dữ liệu thực hiện tất cả các hoạt động bằng cách thao tác với chỉ mục B-tree tương ứng.

Tính năng của bảng tổ chức chỉ mục

  • Khóa chính xác định duy nhất một hàng; khóa chính phải được chỉ định
  • Quyền truy cập dựa trên khóa chính
  • Rowid logic trong cột giả ROWID cho phép xây dựng các chỉ mục phụ
  • Không cho phép ràng buộc UNIQUE nhưng cho phép kích hoạt
  • Không thể được lưu trữ trong một cụm
  • Có thể chứa cột LOB nhưng không chứa cột DÀI
  • Phân phối và nhân rộng không được hỗ trợ


CREATE TABLE command:

CREATE TABLE …

ORGANIZATION INDEX TABLESPACE … (specify this is an IOT)

PCTTHRESHOLD … (specify % of block to hold in order to store row data, valid 0-50 (default 50))

INCLUDING … (specify which column to break a row when row length exceeds PCTTHRESHOLD) OVERFLOW TABLESPACE … (specify the tablespace where the second part of the row will be stored) MAPPING TABLE; (cause creation of a mapping table, needed when creating Bitmap index on IOT)

Bảng ánh xạ ánh xạ ROWID vật lý của chỉ mục thành ROWID logic trong IOT. IOT sử dụng ROWID logic để quản lý quyền truy cập bảng theo chỉ mục vì ROWID vật lý được thay đổi bất cứ khi nào dữ liệu được thêm vào hoặc xóa khỏi bảng. Để phân biệt IOT với các chỉ mục khác, hãy truy vấn chế độ xem USER_INDEXES bằng cách sử dụng cột pct_direct_access. Chỉ IOT mới có giá trị không phải NULL cho cột này.

Chỉ mục miền ứng dụng

Oracle cung cấp tính năng lập chỉ mục có thể mở rộng để chứa các chỉ mục trên các loại dữ liệu phức tạp như tài liệu, dữ liệu không gian, hình ảnh và video clip và sử dụng các kỹ thuật lập chỉ mục chuyên dụng.

Với lập chỉ mục có thể mở rộng, bạn có thể đóng gói các quy trình quản lý chỉ mục dành riêng cho ứng dụng dưới dạng một loại chỉ mục đối tượng giản đồ và xác định một chỉ mục miền (chỉ mục dành riêng cho ứng dụng) trên các cột của bảng hoặc thuộc tính của một loại đối tượng. Lập chỉ mục có thể mở rộng cũng cung cấp quá trình xử lý hiệu quả của toán tử dành riêng cho ứng dụng s.

Phần mềm ứng dụng, được gọi là cartridg e, kiểm soát cấu trúc và nội dung của một chỉ mục miền. Máy chủ Oracle tương tác với ứng dụng để xây dựng, duy trì và tìm kiếm chỉ mục miền. Bản thân cấu trúc chỉ mục có thể được lưu trữ trong cơ sở dữ liệu Oracle dưới dạng bảng được tổ chức theo chỉ mục hoặc bên ngoài dưới dạng tệp.

Sử dụng chỉ mục miền

Chỉ mục miền được xây dựng bằng cách sử dụng logic lập chỉ mục được cung cấp bởi loại chỉ mục do người dùng xác định. Loại chỉ mục cung cấp một cơ chế hiệu quả để truy cập dữ liệu đáp ứng các vị từ toán tử nhất định. Thông thường, kiểu chỉ mục do người dùng xác định là một phần của tùy chọn Oracle, như tùy chọn Không gian.

Ví dụ:SpatialIndextype cho phép tìm kiếm và truy xuất hiệu quả dữ liệu không gian chồng lên một hộp giới hạn nhất định.

Hộp mực xác định các tham số bạn có thể chỉ định trong việc tạo và duy trì chỉ mục miền. Tương tự, các đặc điểm lưu trữ và hiệu suất của chỉ mục miền được trình bày trong tài liệu về hộp mực cụ thể.

Cho đến nay, chúng tôi đã đề cập đến các loại chỉ mục khác nhau trong oracle với một ví dụ, bây giờ hãy kiểm tra cách thay đổi / thả / tạo lại chúng

Cách tạo lại chỉ mục / xây dựng lại chỉ mục trong oracle

Chúng ta có thể sử dụng câu lệnh ALTER INDEX… REBUILD để tổ chức lại hoặc thu gọn một chỉ mục hiện có hoặc để thay đổi các đặc tính lưu trữ của nó

Câu lệnh REBUILD sử dụng chỉ mục hiện có làm cơ sở cho chỉ mục mới.

ALTER INDEX… REBUILD thường nhanh hơn so với việc loại bỏ và tạo lại một chỉ mục.

Nó đọc tất cả các khối chỉ mục bằng cách sử dụng I / O đa khối sau đó loại bỏ các khối nhánh.

Một ưu điểm nữa của phương pháp này là chỉ mục cũ vẫn có sẵn cho các truy vấn trong khi quá trình xây dựng lại đang diễn ra.

Alter index  <index name>  rebuild ;

Alter index  <index name>  rebuild  tablespace <name>;

Cách viết câu lệnh tránh sử dụng chỉ mục

  • Bạn có thể sử dụng gợi ý trình tối ưu hóa NO_INDEX để cung cấp cho CBO tính linh hoạt tối đa trong khi không cho phép sử dụng một chỉ mục nhất định.
  • Bạn có thể sử dụng gợi ý ĐẦY ĐỦ để buộc trình tối ưu hóa chọn quét toàn bộ bảng thay vì quét chỉ mục.
  • Bạn có thể sử dụng các gợi ý INDEX, INDEX_COMBINE hoặc AND_EQUAL để buộc trình tối ưu hóa sử dụng một chỉ mục hoặc một tập hợp các chỉ mục được liệt kê thay vì một chỉ mục khác.

Cách thu thập thống kê cho Chỉ mục

Thống kê chỉ mục được thu thập bằng cách sử dụng câu lệnh ANALYZE INDEX hoặc dbms_stats.

Các tùy chọn có sẵn là CẠNH TRANH / THỐNG KÊ DỰ TOÁN hoặc CẤU TRÚC HỢP LỆ.

Từ 10g trở đi, khi chỉ mục được tạo, việc tính toán thống kê được thực hiện tự động

Khi sử dụng cấu trúc xác thực, Oracle sẽ điền vào chế độ xem INDEX_STATS với các thống kê liên quan đến chỉ mục được phân tích. Thống kê chứa số lượng hàng &khối lá (LF_ROWS, LF_BLKS), số lượng hàng &khối nhánh (BR_ROWS, BR_BLKS), số lượng hàng lá đã bị xóa (DEL_LF_ROWS), không gian đã sử dụng (USED_SPACE), số lượng khóa riêng biệt (DISTINCT_KEYS) , v.v. Những thống kê này có thể được sử dụng để xác định xem chỉ mục có nên được xây dựng lại hay không

Oracle quyết định như thế nào về việc sử dụng chỉ mục?

Oracle tự động quyết định liệu chỉ mục có nên được sử dụng bởi công cụ Trình tối ưu hóa hay không.

Oracle quyết định có sử dụng một chỉ mục hay không tùy thuộc vào truy vấn.

Oracle có thể hiểu liệu việc sử dụng một chỉ mục có cải thiện hiệu suất trong truy vấn nhất định hay không. Nếu Oracle cho rằng việc sử dụng một chỉ mục sẽ cải thiện hiệu suất, thì nó sẽ sử dụng chỉ mục đó nếu không nó sẽ bỏ qua chỉ mục.

Hãy cho chúng tôi hiểu bằng ví dụ này

Chúng tôi có một bảng emp chứa emp_name, lương, dept_no, emp_no, date_of_joining và chúng tôi có một chỉ mục trên emp_name

Truy vấn 1

select * from emp  where emp_name = 'John';

Truy vấn trên sẽ sử dụng chỉ mục vì chúng tôi đang cố gắng lấy thông tin về một emp dựa trên tên.

Truy vấn 2

select * from emp;

Truy vấn trên sẽ không sử dụng chỉ mục vì chúng tôi đang cố gắng tìm tất cả các hàng trong bảng và chúng tôi không có mệnh đề where trong truy vấn

Truy vấn 3

select * from emp where dept_no =5;

Truy vấn trên sẽ không sử dụng chỉ mục như mệnh đề where không chọn cột có chỉ mục

Truy vấn 4

select * from emp where substr(emp_name,1,4) =’XYZW’;

Truy vấn trên sẽ không sử dụng chỉ mục làm mệnh đề where sử dụng hàm trên cột và chúng tôi không có chỉ mục chức năng trên emp_name

Làm cách nào để tạo hoặc xây dựng lại chỉ mục Trực tuyến?

Oracle được sử dụng để khóa bảng mà chỉ mục đang được tạo trong suốt quá trình tạo trong các phiên bản cũ hơn. Điều này làm cho bảng không có sẵn để thao tác dữ liệu trong quá trình tạo chỉ mục.

Giờ đây với 8i, Oracle đã giới thiệu việc xây dựng lại trực tuyến chỉ mục trong đó Oracle không khóa bảng mà chỉ mục đang được tạo.

Lập chỉ mục trực tuyến được cung cấp thông qua từ khóa ONLINE.

CREATE <UNIQUE|NON UNIQUE>  INDEX <index_name>
ON <table_name> (<column_name>,<column_name>…)
PCTFREE <integer>
TABLESPACE <tablespace_name>
Online;

Alter index <index name> rebuild online;

Về cơ bản, với việc xây dựng lại trực tuyến, Oracle khóa bảng khi bắt đầu và kết thúc quá trình tạo chỉ mục. Nó cho phép các giao dịch ở giữa. Cơ chế đã được cải thiện khá nhiều với 11g và 12c

Hạn chế của chỉ số là gì

Các chỉ mục làm tăng hiệu suất của một truy vấn được chọn, chúng cũng có thể làm giảm hiệu suất của thao tác dữ liệu.

Nhiều chỉ mục trên bảng có thể làm chậm quá trình INSERTS và DELETES một cách đáng kể

Càng nhiều chỉ mục trên bảng, thì càng mất nhiều thời gian để chèn và xóa.

Tương tự, mọi thay đổi đối với cột được lập chỉ mục sẽ cần thay đổi đối với chỉ mục.

Vì vậy, chúng ta cần lựa chọn chỉ mục rất cẩn thận và bỏ đi những chỉ mục không được sử dụng.

Mặc dù không gian thừa bị chiếm bởi các chỉ mục cũng là một điều cần cân nhắc, nhưng điều đó có thể không quan trọng lắm vì chi phí lưu trữ dữ liệu đã giảm đáng kể.

Chỉ mục không thể sử dụng là gì

Trình tối ưu hóa bỏ qua một chỉ mục không sử dụng được trong việc quyết định kế hoạch giải thích

Nó cũng không được duy trì bởi DML, tức là cập nhật, chèn, xóa không cập nhật chỉ mục

Có thể có một số lý do khiến chỉ mục ở trạng thái không sử dụng được. Bạn đã xây dựng lại bảng nhưng không xây dựng lại chỉ mục, khi đó chỉ mục sẽ ở trạng thái không sử dụng được. Một lý do khác khiến chỉ mục không thể sử dụng được là để cải thiện hiệu suất tải hàng loạt. Một lý do khác có thể là trình tối ưu hóa chọn sai chỉ mục mọi lúc và thời điểm rất quan trọng, vì vậy bạn có thể quyết định làm cho nó không sử dụng được

Chỉ mục hoặc phân vùng chỉ mục không sử dụng được phải được xây dựng lại hoặc bị loại bỏ và tạo lại trước khi nó có thể được sử dụng. Việc cắt bớt một bảng làm cho một chỉ mục không sử dụng được hợp lệ.

Bắt đầu với Cơ sở dữ liệu Oracle 11g Release 2, khi bạn làm cho một chỉ mục hiện có không thể sử dụng được, phân đoạn chỉ mục của nó sẽ bị loại bỏ.

Chức năng của các chỉ mục không sử dụng được phụ thuộc vào cài đặt của tham số khởi tạo SKIP_UNUSABLE_INDEXES.

Khi SKIP_UNUSABLE_INDEXES là TRUE (mặc định), thì:

Các câu lệnh DML chống lại bảng tiếp tục, nhưng các chỉ mục không sử dụng được không được duy trì.

Các câu lệnh DML kết thúc bằng lỗi nếu có bất kỳ chỉ mục nào không sử dụng được được sử dụng để thực thi ràng buộc DUY NHẤT.

Đối với các chỉ mục không được phân vùng, trình tối ưu hóa không xem xét bất kỳ chỉ mục nào không sử dụng được khi tạo kế hoạch truy cập cho các câu lệnh SELECT. Ngoại lệ duy nhất là khi một chỉ mục được chỉ định rõ ràng với gợi ý INDEX ().

Khi SKIP_UNUSABLE_INDEXES là FALSE, thì:

Nếu có bất kỳ chỉ mục hoặc phân vùng chỉ mục nào không sử dụng được, bất kỳ câu lệnh DML nào có thể khiến các chỉ mục hoặc phân vùng chỉ mục đó được cập nhật sẽ bị kết thúc bằng lỗi.

Đối với câu lệnh SELECT, nếu có chỉ mục không sử dụng được hoặc phân vùng chỉ mục không sử dụng được nhưng trình tối ưu hóa không chọn sử dụng nó cho kế hoạch truy cập, câu lệnh sẽ tiếp tục. Tuy nhiên, nếu trình tối ưu hóa chọn sử dụng chỉ mục không sử dụng được hoặc phân vùng chỉ mục không sử dụng được, câu lệnh kết thúc với lỗi.

Chế độ xem từ điển dữ liệu trên Chỉ mục

DBA_INDEXES ALL_INDEXES USER_INDEXES Dạng xem DBA mô tả các chỉ mục trên tất cả các bảng trong cơ sở dữ liệu. Chế độ xem TẤT CẢ mô tả các chỉ mục trên tất cả các bảng mà người dùng có thể truy cập. Chế độ xem USER bị hạn chế đối với các chỉ mục do người dùng sở hữu. Một số cột trong các dạng xem này chứa thống kê được tạo bởi gói DBMS_STATS hoặc câu lệnh ANALYZE.
DBA_IND_COLUMNS ALL_IND_COLUMNS

USER_IND_COLUMNS

Các dạng xem này mô tả các cột của chỉ mục trên bảng. Một số cột trong các dạng xem này chứa thống kê được tạo bởi gói DBMS_STATS hoặc câu lệnh ANALYZE.
DBA_IND_EXPRESSIONS ALL_IND_EXPRESSIONS

USER_IND_EXPRESSIONS

Các dạng xem này mô tả các biểu thức của các chỉ mục dựa trên hàm trên các bảng.
DBA_IND_STATISTICS ALL_IND_STATISTICS

USER_IND_STATISTICS

Các chế độ xem này chứa thống kê trình tối ưu hóa cho các chỉ mục.

cách tìm chỉ mục trên bảng

set pagesize 50000 verify off echo off
col table_name head 'Table Name' format a20
col index_name head 'Index Name' format a25
col column_name head 'Column Name' format a30
break on table_name on index_name
select     table_name, index_name, column_name
from all_ind_columns
where table_name like upper('&Table_Name')
order by table_name, index_name, column_position
/

Cách xác định kích thước chỉ mục

Size of INDEX

select segment_name,sum(bytes)/1024/1024/1024 as "SIZE in GB" from user_segments where segment_name='INDEX_NAME' group by segment_name;

OR
select owner,segment_name,sum(bytes)/1024/1024/1024 as "SIZE in GB" from dba_segments where owner='SCHEMA_NAME' and segment_name='INDEX_NAME' group by owner,segment_name;

 

List of Size of all INDEXES of a USER
select segment_name,sum(bytes)/1024/1024/1024 as "SIZE in GB" from user_segments where segment_type='INDEX' group by segment_name order by "SIZE in GB" desc;

OR

select owner,segment_name,sum(bytes)/1024/1024/1024 as "SIZE in GB" from dba_segments where owner='SCHEMA_NAME' and segment_type='INDEX' group by owner,segment_name order by "SIZE in GB" desc;

Sum of sizes of all indexes

select owner,sum(bytes)/1024/1024/1024 as "SIZE in GB" from dba_segments where owner='SCHEMA_NAME' and segment_type='INDEX' group by owner;

Cách xác định Chỉ mục định nghĩa

set long 4000
select dbms_metadata.get_ddl('INDEX','<INDEX Name>','<INDEX OWNER') from dual;

Cách xác định thống kê Chỉ mục

set pages 250
set linesize 100
set verify off
col table_name format a24 heading 'TABLE NAME'
col index_name format a23 heading 'INDEX NAME'
col u format a1 heading 'U'
col blevel format 0 heading 'BL'
col leaf_blocks format 999990 heading 'LEAF|BLOCKS'
col distinct_keys format 9999990 heading 'DISTINCT|KEYS'
col avg_leaf_blocks_per_key format 9999990 heading 'LEAF|BLKS|/KEY'
col avg_data_blocks_per_key format 9999990 heading 'DATA|BLKS|/KEY'
rem
break on table_name
rem
select table_name, index_name,
decode( uniqueness, 'UNIQUE', 'U', null ) u,
blevel, leaf_blocks, distinct_keys,
avg_leaf_blocks_per_key, avg_data_blocks_per_key
from sys.dba_indexes
where table_owner like upper('&owner')
and table_name like upper('&table')
order by table_owner, table_name, index_name;

Các bài viết có liên quan

bảng bên ngoài trong Oracle:Hãy xem bài đăng này để biết thông tin về cách sử dụng bảng bên ngoài trong oracle với ví dụ, cách tạo bảng bên ngoài, cách sử dụng nó
Oracle Tạo bảng:Bảng là đơn vị dữ liệu cơ bản lưu trữ trong Cơ sở dữ liệu Oracle. chúng tôi đề cập đến cách sử dụng lệnh tạo bảng của Oracle để tạo bảng với khóa ngoại / khóa chính. br /> Tìm trạng thái chỉ mục và các cột được chỉ định cho bảng
Chỉ mục ảo trong Oracle:Chỉ mục ảo trong Oracle là gì? Công dụng, hạn chế, ưu điểm và cách sử dụng để kiểm tra giải thích kế hoạch trong cơ sở dữ liệu Oracle, Tham số ẩn _USE_NOSEGMENT_INDEXES
Hệ số phân cụm chỉ mục Oracle:Hệ số phân cụm chỉ mục Oracle được tính toán như thế nào và tác động của nó đến kế hoạch giải thích
Phân vùng Oracle Chỉ mục:Tìm hiểu chỉ mục phân vùng Oracle, Chỉ mục không phân vùng toàn cầu là gì ?, Chỉ mục cục bộ có tiền tố, chỉ mục cục bộ không có tiền tố là gì

Các khóa học được đề xuất

Đây là Khóa học Udemy hay dành cho Oracle SQL
Oracle-Sql-Step-by-step:Khóa học này bao gồm sql cơ bản, các phép nối, Tạo Bảng và sửa đổi cấu trúc của nó, Tạo Dạng xem, Liên minh, Liên hợp-tất cả và nhiều thứ khác . Một khóa học tuyệt vời và phải có cho người mới bắt đầu sử dụng SQL
Khóa học chứng chỉ SQL Oracle hoàn chỉnh :Đây là một khóa học tốt cho bất kỳ ai muốn sẵn sàng tìm việc cho các kỹ năng của nhà phát triển SQL. Một khóa học được giải thích thú vị
Oracle SQL Developer:Cơ bản, Mẹo và Thủ thuật :Công cụ dành cho nhà phát triển Oracle Sql đang được nhiều nhà phát triển sử dụng. Khóa học này cung cấp cho chúng ta các thủ thuật và bài học về cách sử dụng nó một cách hiệu quả và trở thành một nhà phát triển sql hiệu quả
Oracle SQL Performance Tuning Masterclass 2020 :Điều chỉnh hiệu suất là một trong những kỹ năng quan trọng và được tìm kiếm nhiều nhất. Đây là một khóa học tốt để tìm hiểu về nó và bắt đầu thực hiện điều chỉnh hiệu suất sql


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Danh sách các khóa ngoại và các bảng mà chúng tham chiếu trong Oracle DB

  2. Làm cách nào để chèn một cột vào một vị trí cụ thể trong oracle mà không làm rơi và tạo lại bảng?

  3. Các bảng lịch sử vá lỗi trong Ứng dụng Oracle (11i / R12.1 / R12.2)

  4. oracle SQL cộng với cách kết thúc lệnh trong tệp SQL?

  5. Kho dữ liệu Lập hồ sơ dữ liệu ETL với Oracle Warehouse Builder