Thứ Tư, 26 tháng 7, 2023

Invisible Index trong MySQL

Trong bài này chúng ta sẽ tìm hiểu Invisible Index trong MySQL, đây là trạng thái chỉ mục ẩn giúp bạn dễ dàng bật và tắt các chỉ mục bất kì, trừ Primary Key.

Mục lục

  • 1. Invisible Index là gì?
  • 2. MySQL invisible index và primary key

1. Invisible Index là gì?

Invisible Index là trạng thái chỉ mục ẩn, tức là những chỉ mục nào được thiết lập trạng thái này thì sẽ không được sử dụng. Muốn bật lại thì thay đổi trạng thái từ INVISIBLE sang VISIBLE.

Để tạo invisible index thì ta sử dụng cú pháp sau:

1
2
CREATE INDEX index_name
ON table_name( c1, c2, ...) INVISIBLE;

Trong đó lệnh CREATE INDEX thông báo cho MySQL tạo ra một index có tên là index_name nằm trong table table_name và xác định chỉ mục ẩn bằng từ khóa INVISIBLE.

Bài viết này được đăng tại tranvanbinh.vn

Như trong ví dụ dưới đây mình đã tạo ra một chỉ mục ẩn có tên là extension nằm trong bảng employees.

1
2
CREATE INDEX extension
ON employees(extension) INVISIBLE;

Để thay đổi trạng thái của một chỉ mục từ INVISIBLE sang VISIBLE và ngược lại thì ta dùng cú pháp sau:

1
2
ALTER TABLE table_name
ALTER INDEX index_name [VISIBLE | INVISIBLE];

Ví dụ sau đổi trạng tháu của chỉ mục extension từ INVISIBLE sang VISIBLE.

1
2
ALTER TABLE employees
ALTER INDEX extension VISIBLE;

Bạn có thể kiểm tra trạng thái của chỉ mục bằng cách sử dụng lệnh select truy vấn vào table statistics nằm trong information_schema của MySQL.

1
2
3
4
5
6
7
8
SELECT
    index_name,
    is_visible
FROM
    information_schema.statistics
WHERE
    table_schema = 'classicmodels'
        AND table_name = 'employees';

Kết quả dạng như sau:

MySQL Invisible Index Example png

Một cách khác, bạn cũng có thể dùng lệnh SHOW INDEXES và nhận kết quả tương đương.

1
SHOW INDEXES FROM employees;

Như mình đã nói ở đầu bài, trình tối ưu hóa sẽ không sử dụng những chỉ mục bị ẩn (INVISIBLE). Vậy câu hỏi đặt ra là tại sao MySQL lại đưa ra trạng thái chỉ mục này? Hãy suy nghĩ rằng có một số trường hợp bạn muốn tắt index tạm thời thay vì xóa chúng để xem tốc độ có tối ưu hơn không, sau đó bật lại để so sánh.

2. MySQL invisible index và primary key

Lưu ý rằng với chỉ mục primary key thì bạn không thể thiết lập chúng là invisible được, bởi đây là loại đặc biệt và duy nhất trong mỗi table, nó ảnh hưởng đến ràng buộc toàn vẹn của dữ liệu.

Giả sử bạn không muốn tạo khóa chính và thay vào đó là dùng UNIQUE, lúc này liệu có thay đổi được chỉ mục này sang trạng thái ẩn?

Câu trả lời là MySQL sẽ tự động hiểu chỉ mục UNIQUE đó là primary key nhé, mặc dù bạn chưa tạo primary key. Hãy xem ví dụ dưới đây để hiểu rõ hơn.

Trước tiên hãy tạo một table discounts có cấu trúc như sau:

1
2
3
4
5
6
7
8
CREATE TABLE discounts (
    discount_id INT NOT NULL,
    name VARCHAR(50) NOT NULL,
    valid_from DATE NOT NULL,
    valid_to DATE NOT NULL,
    amount DEC(5 , 2 ) NOT NULL DEFAULT 0,
    UNIQUE discount_id(discount_id)
);

Mình đã không tạo khóa chính, thay vao fđó tạo UNIQUE. Bây giờ bạn hãy thử đổi trạng thái của key UNIQUE này sang invisible xem thế nào nhé.

1
2
ALTER TABLE discounts
ALTER INDEX discount_id INVISIBLE;

Chạy câu SQL này bạn sẽ gặp lỗi như sau:

1
Error Code: 3522. A primary key index cannot be invisible

Như vậy là mình đã hướng dẫn xong cách sử dụng Invisible Index trong MySQL. Đây là cách giúp bạn chạy thử nghiệm các index để xem tốc độ tối ưu thế nào.

=============================
* KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE trực tiếp từ tôi giúp bạn bước đầu trở thành những chuyên gia DBA, đủ kinh nghiệm đi thi chứng chỉ OA/OCP, đặc biệt là rất nhiều kinh nghiệm, bí kíp thực chiến trên các hệ thống Core tại VN chỉ sau 1 khoá học.
* CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
* Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile/Zalo: 0902912888
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: https://www.youtube.com/@binhguru
👨 Tiktok: https://www.tiktok.com/@binhguru
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhguru
👨 Podcast: https://www.podbean.com/pu/pbblog-eskre-5f82d6
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội

=============================
oracle tutorial, học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,sql tutorial, khóa học pl/sql tutorial, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail,oracle RAC, ASM, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, postgresql tutorial, mysql tutorial, mariadb tutorial, ms sql server tutorial, nosql, mongodb tutorial, oci, cloud, middleware tutorial, hoc solaris tutorial, hoc linux tutorial, hoc aix tutorial, unix tutorial, securecrt, xshell, mobaxterm, putty

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master