Hướng dẫn drop index mysql

Trong bài này mình sẽ hướng dẫn các bạn cách xóa index trong MySQL bằng cách sử dụng lệnh DROP INDEX, lệnh này rất hữu ích vì nó giúp bạn quản lý được các index trong table của mình.

Hướng dẫn drop index mysql

Hướng dẫn drop index mysql

Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

1. Cách sử dụng DROP INDEX trong MySQL

Để xóa một Index đã có sẵn trong table thì ta sử dụng câu lệnh DROP INDEX, cú pháp như sau:

DROP INDEX index_name ON table_name
[algorithm_option | lock_option];

Trong đó:

  • DROP INDEX là câu lệnh khai báo bắt đầu yêu cầu xóa index
  • index_name là tên index mà bạn muốn xóa
  • table_name là table bạn muốn xóa
  • algorithm_option và lock_option là hai thông số tùy chọn, mình sẽ nói về nó ở phần tiếp theo.

Algorithm

Thông số algorithm_option là thuật toán àm bạn muốn sử dụng để xóa chỉ mục index, cú pháp của nó như sau:

Bài viết này được đăng tại [free tuts .net]

ALGORITHM [=] {DEFAULT|INPLACE|COPY}

Để xóa chỉ mục, các thuật toán sau được hỗ trợ:

  • COPY: Table sẽ được copy sang một bảng mới, sau đó thực hiện xóa index trên table gốc, tất cả các câu lệnh khác như INSERT / UPDATE trên table này sẽ bị khóa không được thực hiện tại thời điểm đó.
  • INPLACE: Table được xây dựng lại tai chỗ thay vì sao chép sang bảng mới. Thuật toán này cho phép các câu lệnh khác thực hiện trong quá trình xóa.

Lưu ý rằng câu lệnh ALGORITHM là tùy chọn, nếu bạn không thiết lập thì nó sẽ sử dụng thuật toán INPLACE. Trong trường hợp INPLACE không hỗ trợ thì nó sẽ sử dụng COPY.

Nếu bạn sử dụng DEFAULT đồng nghĩa bạn bỏ qua mệnh đề ALGORITHM này.

Lock

Thông số Lock_option kiểm soát mức độ đọc và ghi đồng thời trên bảng trong khi chỉ mục đang bị xóa.

Sau đây cho thấy cú pháp của lock_option:

LOCK [=] {DEFAULT|NONE|SHARED|EXCLUSIVE}

Các chế độ lock đuọc hỗ trợ như sau:

  • DEFAULT: Cho phép bạn có mức độ đồng thời tối đa cho một thuật toán nhất định. Đầu tiên nó cho phép đọc và ghi đồng thời nếu được hỗ trợ. Nếu không nó cho phép đọc đồng thời nếu được hỗ trợ. Nếu không thì thực thi truy cập độc quyền.
  • NONE: nếu NONE được hỗ trợ, bạn có thể đọc và ghi đồng thời. Nếu không MySQL phát sinh lỗi.
  • SHARED: Nếu SHARED được hỗ trợ thì bạn có thể đọc đồng thời nhưng không ghi. MySQL phát sinh lỗi nếu các lần đọc đồng thời không được hỗ trợ.
  • EXCLUSIVE: điều này thực thi quyền truy cập độc quyền.

2. Sử dụng lệnh DROP INDEX để xóa chỉ mục trong MySQL

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

CREATE TABLE leads(
    lead_id INT AUTO_INCREMENT,
    first_name VARCHAR(100) NOT NULL,
    last_name VARCHAR(100) NOT NULL,
    email VARCHAR(255) NOT NULL,
    information_source VARCHAR(255),
    INDEX name(first_name,last_name),
    UNIQUE email(email),
    PRIMARY KEY(lead_id)
);

Câu lệnh dưới đây xóa chỉ mục name ra khỏi table leads.

DROP INDEX name ON leads;

Câu lệnh sau sẽ loại bỏ chỉ mục email từ leads với một thuật toán và khóa cụ thể:

DROP INDEX email ON leads
ALGORITHM = INPLACE 
LOCK = DEFAULT;

2. Xóa khóa chính Primary Key ra khỏi table

Chỉ mục Primary Key là loại đặc biệt có tên gọi là PRIMARY, vì vậy bạn sử dụng nó để áp dụng trong lệnh Drop Index.

DROP INDEX `PRIMARY` ON table_name;

Ví dụ: Tạo mới một table như sau.

CREATE TABLE t(
    pk INT PRIMARY KEY,
    c VARCHAR(10)
);

Và đây là câu lệnh xóa khóa chính:

DROP INDEX `PRIMARY` ON t;

Trên là hướng dẫn cách xóa khóa chỉ mục index trong MySQL bằng cách sử dụng lệnh DROP INDEX. Chúc bạn thực hiện thành công, hẹn gặp ở bài tiếp theo nhé.

13.1.27 DROP INDEX Statement

DROP INDEX index_name ON tbl_name
    [algorithm_option | lock_option] ...

algorithm_option:
    ALGORITHM [=] {DEFAULT | INPLACE | COPY}

lock_option:
    LOCK [=] {DEFAULT | NONE | SHARED | EXCLUSIVE}

DROP INDEX drops the index named index_name from the table tbl_name. This statement is mapped to an ALTER TABLE statement to drop the index. See Section 13.1.9, “ALTER TABLE Statement”.

To drop a primary key, the index name is always PRIMARY, which must be specified as a quoted identifier because PRIMARY is a reserved word:

DROP INDEX `PRIMARY` ON t;

Indexes on variable-width columns of NDB tables are dropped online; that is, without any table copying. The table is not locked against access from other NDB Cluster API nodes, although it is locked against other operations on the same API node for the duration of the operation. This is done automatically by the server whenever it determines that it is possible to do so; you do not have to use any special SQL syntax or server options to cause it to happen.

ALGORITHM and LOCK clauses may be given to influence the table copying method and level of concurrency for reading and writing the table while its indexes are being modified. They have the same meaning as for the ALTER TABLE statement. For more information, see Section 13.1.9, “ALTER TABLE Statement”

MySQL NDB Cluster supports online operations using the same ALGORITHM=INPLACE syntax supported in the standard MySQL Server. See Section 23.6.11, “Online Operations with ALTER TABLE in NDB Cluster”, for more information.