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

Ví dụ về cải thiện hiệu suất truy vấn với chỉ mục

Trong bài viết này, chúng ta sẽ xem xét cách một chỉ mục có thể cải thiện hiệu suất truy vấn.

Giới thiệu

Chỉ mục trong Oracle và các cơ sở dữ liệu khác là các đối tượng lưu trữ các tham chiếu đến dữ liệu trong các bảng khác. Chúng được sử dụng để cải thiện hiệu suất truy vấn, thường là câu lệnh SELECT.

Chúng không phải là một “viên đạn bạc” - chúng không phải lúc nào cũng giải quyết được các vấn đề về hiệu suất bằng các câu lệnh SELECT. Tuy nhiên, chúng chắc chắn có thể giúp ích.

Hãy xem xét điều này trên một ví dụ cụ thể.

Ví dụ

Đối với ví dụ này, chúng tôi sẽ sử dụng một bảng duy nhất được gọi là Khách hàng chứa các cột như ID, Tên, Họ, giá trị tín dụng tối đa, giá trị ngày đã tạo và các cột khác mà chúng tôi sẽ không sử dụng.

SELECT customer_id,first_name,last_name, max_credit, created_date
FROM customer;

Đây là một mẫu của bảng.

[id bảng =38 /]

Bây giờ, chúng ta sẽ tìm thấy những điều sau:

  • Ai trong số các khách hàng đã được thêm vào bảng cùng ngày với những khách hàng đầu tiên
  • Khách hàng được lọc theo last_name theo thứ tự tăng dần
  • Hiển thị ID khách hàng, Tên, Họ, tín dụng tối đa và ngày tạo

Để thực hiện việc này, hãy tạo truy vấn sau:

SELECT customer_id,
first_name,
last_name,
max_credit,
created_date
FROM customer
WHERE created_date = (
     SELECT MIN(created_date)
     FROM customer
)
ORDER BY last_name;

Đầu ra trông giống như sau:

[id bảng =39 /]

Nó hiển thị dữ liệu chúng tôi muốn.

Hiệu suất trước khi áp dụng chỉ mục

Bây giờ, hãy xem kế hoạch giải thích cho truy vấn này. Tôi lấy được điều này bằng cách chạy EXPLAIN PLAN FOR cho câu lệnh SELECT và lệnh sau:

SELECT * FROM TABLE(dbms_xplan.display);

Bạn cũng có thể nhận được kết quả đầu ra tương tự bằng cách sử dụng tính năng Giải thích kế hoạch bên trong IDE của mình.

Chúng ta có thể thấy rằng nó thực hiện Truy cập Toàn bộ Bảng ở hai điểm, đó là trong truy vấn con và trong truy vấn bên ngoài. Điều này là do không có chỉ mục nào trên bảng được sử dụng.

Nó có chi phí là 2934. Khi tôi chạy nó, truy vấn đã tìm nạp được 785 hàng trong 1,9 giây. Nó có vẻ nhanh chóng nhưng đây chỉ là một ví dụ mà chúng tôi có thể cải thiện. Các truy vấn trong hệ thống thực có thể mất nhiều thời gian hơn.

Một cách chúng tôi có thể cải thiện hiệu suất của truy vấn này là thêm một chỉ mục vào cột ngày_đã_ tạo. Cột này được sử dụng cả trong mệnh đề WHERE của truy vấn bên ngoài và trong hàm MIN của truy vấn bên trong.

Thêm chỉ mục

Chúng tôi có thể thêm chỉ mục vào bảng này để cải thiện hiệu suất truy vấn. Chỉ mục này sẽ được lưu trữ trong cột created_date để mã có thể trông giống như sau:

CREATE INDEX idx_cust_cdate
ON customer (created_date);

Bây giờ, chỉ mục chỉ được tạo trên cột này. Nó sẽ giúp chúng tôi cải thiện hiệu suất trong truy vấn của chúng tôi, nhưng chúng tôi sẽ phải kiểm tra nó trước.

Chúng tôi đã tạo chỉ mục b-tree, đây có lẽ là tất cả những gì chúng tôi cần trên cột này. Chúng tôi sẽ sớm xác nhận điều đó trong kế hoạch giải thích. Tôi đã viết một hướng dẫn về chỉ mục Oracle bao gồm cách biết loại chỉ mục nào sẽ được sử dụng, cũng như nhiều thông tin có giá trị khác.

Hiệu suất sau khi lập chỉ mục Đã thêm

Hãy chạy lại kế hoạch giải thích cho truy vấn này.

Chúng ta có thể thấy rằng một chỉ mục đã được sử dụng ở bước cuối cùng. Nó cho thấy rằng Quét toàn bộ đã được thực hiện với chỉ mục idx_cust_cdate, là chỉ mục mà chúng tôi vừa tạo.

Nó cũng hiển thị chi phí tổng thể là 1472 và tìm nạp 785 bản ghi trong 0,9 giây.

Thời gian chạy chỉ được cải thiện một chút (từ 1,9 lên 0,9 giây), nhưng đó là mức cải thiện khoảng 50% chỉ bằng cách thêm chỉ mục vào tập dữ liệu nhỏ này.

Như đã đề cập trước đó, các truy vấn thực sẽ phức tạp hơn truy vấn này và sẽ mất nhiều thời gian hơn để thực hiện. Tuy nhiên, đây là một ví dụ về cách một chỉ mục có thể cải thiện kế hoạch truy vấn và thời gian chạy truy vấn.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách tham gia nhiều (3+) bảng trong một câu lệnh

  2. Kho lưu trữ cơ sở dữ liệu kiểm tra IRI-Windocks

  3. Kết nối các ứng dụng ODBC trên Windows với QuickBooks Online

  4. Sử dụng thuật sĩ tổ chức lại ngoại tuyến

  5. Các trang trình bày và mẫu giao nhau trong SQL