Một số cơ sở dữ liệu là một cấu trúc dữ liệu để cải thiện tốc độ của các hoạt động trong một bảng. Các số chỉ có thể được tạo ra bằng cách sử dụng một hoặc nhiều cột, cung cấp cơ sở cho việc nghiên cứu ngẫu nhiên cả hai nhanh chóng và hiệu quả
Trong khi tạo chỉ mục, cần lưu ý rằng các cột đó sẽ được sử dụng để thực hiện các truy vấn SQL và tạo ra một hoặc nhiều chỉ số trên các cột đó là gì
Thực tế, chỉ mục cũng là bảng loại, trong đó giữ nguyên từ khóa chính hoặc chỉ mục trường và một con trỏ đến từng bản ghi vào bảng thực tế
Người sử dụng không thể nhìn thấy các chỉ mục, chúng chỉ được sử dụng để tăng tốc độ truy vấn và sẽ được sử dụng bởi cơ sở dữ liệu tìm kiếm để xác định vị trí bản ghi rất nhanh
Lệnh INSERT và UPDATE tốn nhiều thời gian hơn trên các bảng có chỉ mục khi lệnh SELECT trở nên nhanh hơn trên các bảng này. Lý do là vì, trong khi chèn và cập nhật, cơ sở dữ liệu cũng cần phải chèn hoặc cập nhật các giá trị chỉ mục
Chỉ mục đơn giản và Chỉ mục duy nhất
Bạn có thể tạo một Chỉ mục duy nhất trên một bảng. Một chỉ mục duy nhất có nghĩa là hai hàng không thể có cùng một giá trị chỉ mục. Dưới đây là cú pháp để tạo một mục trên một bảng
CREATE UNIQUE INDEX index_name ON table_name ( column1, column2,...);Bạn có thể sử dụng một hoặc nhiều cột để tạo một mục. Ví dụ, chúng ta có thể tạo chỉ mục trên ALTER TABLE tbl_name ADD INDEX index_name (column_list) 8 sử dụng ALTER TABLE tbl_name ADD INDEX index_name (column_list) 9
CREATE UNIQUE INDEX user_email ON users (email);Bạn có thể tạo một Simple Index trên một bảng. Đơn giản, bạn chỉ cần bỏ qua từ khóa UNIQUE từ truy vấn để tạo Chỉ mục đơn giản. Simple Index cho phép tồn tại bản sao các giá trị trong một bảng
Nếu bạn muốn lập chỉ mục các giá trị trong một cột theo thứ tự giảm dần, bạn có thể thêm từ DESC sau cột tên
CREATE UNIQUE INDEX user_email ON users (email DESC)Ra lệnh ALTER để thêm và xóa INDEX trong MySQL
Có 4 kiểu lệnh để thêm các mục cho một bảng
ALTER TABLE tbl_name ADD PRIMARY KEY (column_list)Lệnh này bổ sung MỘT KHÓA CHÍNH, nghĩa là các giá trị được thiết lập chỉ mục phải là duy nhất và không thể là NULL
ALTER TABLE tbl_name ADD UNIQUE index_name (column_list)Lệnh này tạo một mục chỉ cho các giá trị để giá trị đó phải là duy nhất (với giá trị NULL là ngoại lệ, chúng có thể xuất hiện nhiều lần)
ALTER TABLE tbl_name ADD INDEX index_name (column_list)Lệnh này bổ sung một mục thông thường, trong đó bất kỳ giá trị nào cũng có thể xuất hiện nhiều hơn một lần
________số 8Lệnh này tạo một mục FULLTEXT đặc biệt, được sử dụng cho mục đích tìm kiếm văn bản
Ví dụ sau để thêm mục cho một bảng đang tồn tại
ALTER TABLE tblUsers ADD INDEX (c);Bạn có thể xóa bất kỳ INDEX nào theo sử dụng mệnh đề DROP cùng với lệnh ALTER. Bạn xem xét ví dụ sau để xóa chỉ mục đã được tạo ở trên
ALTER TABLE tbl_name ADD INDEX index_name (column_list) 0Ra lệnh ALTER để thêm và xóa PRIMARY KEY
Bạn cũng có thể thêm Khóa chính theo cách tương tự. Nhưng chắc chắn rằng Primary Key đang làm việc trên các cột mà là NOT NULL
Ví dụ sau để thêm Primary Key vào một bảng đang tồn tại. Đầu tiên, cột được tạo là NOT NULL và sau đó bổ sung cho nó một Khóa chính
ALTER TABLE tbl_name ADD INDEX index_name (column_list) 1CREATE UNIQUE INDEX user_email ON users (email); 0You can use ALTER command to delete a Primary Key as after
CREATE UNIQUE INDEX user_email ON users (email); 1Để xóa một mục mà không phải là KHÓA CHÍNH, bạn phải xác định lại tên của mục
Hiển thị thông tin chỉ mục trong MySQL Bạn sử dụng lệnh SHOW INDEX để liệt kê tất cả các chỉ mục được liên kết với một bảng. Kết quả trong định dạng dọc (được xác định bởi \G) thường có ích hơn với lệnh này, để tránh một dòng liệt kê dài
You try to example after
CREATE UNIQUE INDEX user_email ON users (email); 2Hãy xem xét ví dụ sau để tìm hiểu và so sánh về tốc độ khi đánh chỉ số cho cách trường
Thông tin về bảng Người dùng
CREATE UNIQUE INDEX user_email ON users (email); 3Và để tìm thông tin điểm của Hoàng Văn Huy (mã số 123123), bạn sẽ truy vấn như sau
CREATE UNIQUE INDEX user_email ON users (email); 4MySQL biết rằng phải tìm ở bảng người dùng nhưng nó sẽ không biết bắt đầu từ đâu. Cũng chí nó cũng không biết trước rằng có bao nhiêu quả. Do đó nó sẽ duyệt qua tất cả các danh sách (ví dụ: 200. 000 người) để tìm thông tin về Hoàng Văn Huy
Chỉ mục là 1 tệp riêng biệt được lưu trữ tại máy chủ và chỉ chứa những Trường mà bạn muốn nó chứa. Nếu bạn tạo 1 Index cho Field user_id (mã số người dùng), MySQL sẽ dễ dàng tìm ra mã số 1 cách nhanh chóng. Ví dụ như cuốn sách, khi cần tìm 1 thông tin, ta thường ngay lập tức tới phần “Mục lục” và tìm từ đó để tăng tốc độ tìm kiếm. Và việc tạo ra Chỉ mục này sẽ làm cho bạn thấy Cơ sở dữ liệu của bạn chạy nhanh hơn 1 cách khác thường
Nhưng trước khi sửa lại cấu trúc của table ở trên, mình sẽ hướng dẫn bạn 1 chút về cách theo dõi kết quả “Tăng tốc MySQL” mà bạn đang làm. Vui lòng sử dụng lệnh GIẢI THÍCH
cú pháp
CREATE UNIQUE INDEX user_email ON users (email); 5Bằng lệnh này, bạn sẽ nhận ra được câu hỏi của bạn, điều gì đang xảy ra và kiểu kết hợp (Tham gia) nào đang diễn ra bên trong
CREATE UNIQUE INDEX user_email ON users (email); 6CREATE UNIQUE INDEX user_email ON users (email); 7- cái bàn. Table nào đang liên quan đến dữ liệu đầu ra
- loại. Đây là thông tin quan trọng, nó cho chúng ta biết kiểu truy vấn nào nó đang sử dụng. Mức độ từ tốt nhất đến chậm nhất như sau. hệ thống, const, eq_ref, ref, phạm vi, chỉ mục, tất cả
có thể_keys. đưa ra những Index có thể sử dụng để truy vấn
Chìa khóa. and Index any being used
key_len. Chiều dài của từng mục trong Chỉ mục
giới thiệu. Các cột đang sử dụng
hàng. Số hàng (rows) mà MySQL dự kiến phải tìm
thêm. Thông tin phụ, thật tệ nếu tại cột này là "sử dụng tạm thời" hoặc "sử dụng sắp xếp tệp"
@@, nhìn lại câu hỏi của chúng ta ta mới thật khủng khiếp. Không có Possible_keys nào được sử dụng, MySQL phải duyệt qua 17123 bản ghi mới tìm ra cái ta cần (Hãy tưởng tượng 1 Diễn đàn sẽ có hơn 500. 000 bản ghi)
Bây giờ chúng ta sẽ thêm Index vào và truy vấn lại
CREATE UNIQUE INDEX user_email ON users (email); 8CREATE UNIQUE INDEX user_email ON users (email); 6CREATE UNIQUE INDEX user_email ON users (email DESC) 3Tốt hơn nhiều rồi, kiểu TYPE = Const có nghĩa là MYSQL hiểu ra chỉ có 1 hàng đúng với ý ta, và có thể hiện qua cột Rows = 1, kiểu key= PRIMARY được sử dụng và chiều dài key_len là 10. Chỉ tìm 1 hàng tất nhiên là tốt hơn nhiều so với tìm 17123 hàng
Vì vậy, câu hỏi đặt ra là, nếu tôi muốn thêm Index cho những cột mà có thể có nhiều hơn 1 kết quả khi truy vấn thì sao?
Bạn có thể thêm chỉ mục theo cặp như bạn thêm chỉ mục cho cặp ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list) 0 và ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list) 1
CREATE UNIQUE INDEX user_email ON users (email DESC) 4CREATE UNIQUE INDEX user_email ON users (email DESC) 0Tuy nhiên, nếu chỉ cần tên
CREATE UNIQUE INDEX user_email ON users (email DESC) 6CREATE UNIQUE INDEX user_email ON users (email DESC) 7thì MySQL sẽ tìm hết vì không hề có Index cho firstname mà chỉ có Index cho (firstname, lastname)
Khi nào thì cần Add Index ? . Vì vậy hãy cân nhắc, nếu Cơ sở dữ liệu của bạn sử dụng INSERT hay UPDATE nhiều hơn là CHỌN thì Index chỉ làm chậm thêm mà thôi
Có thể nhanh hơn nữa không? . Bạn không cần phải làm Index cho cả ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list) 3 mà chỉ cần 1 phần. Giống như chi tiết mục lục của sách mà quá dài cũng làm bạn khá là quái, có phải họ chỉ trích dẫn 1 tựa đề. Quay lại với bảng của chúng ta, họ và tên chỉ tối đa là 50 ký tự, nếu chúng ta lập chỉ mục cho nó, chúng ta tạo ra mỗi bản ghi lên đến 100 ký tự. There can't Tiết kiệm điện theo cách sau
CREATE UNIQUE INDEX user_email ON users (email DESC) 8Bây giờ thì bạn tiết kiệm điện năng được đến 50% mà vẫn đảm bảo tốc độ rồi đó (trừ trường hợp bạn làm Index quá ngắn). Có thể bạn nói máy chủ đĩa cứng của tôi “vô tư” nhưng hãy nhớ rằng “Nhỏ hơn là nhanh hơn”