Mysql tạo chỉ mục

Không chỉ với Mysql mà với bất kỳ cơ sở dữ liệu bất kỳ nào có chỉ mục đánh nó, nó sẽ cải thiện tốc độ tìm kiếm , sắp xếp bản ghi truy cập của một bảng. Tuy nhiên, không phải lúc nào đánh index cũng tốt vì thế chúng ta cần xem xét xem khi nào thì cần đánh index Bài viết hôm nay mình sẽ chỉ ra một số chú ý về cách tạo Index cụ thể cho các bạn mới bắt đầu tìm hiểu

ưu điểm

Mysql tạo chỉ mục
Đẩy nhanh xử lý lọc ,tìm kiếm bản ghi theo điều kiện WHERE Không chỉ giới hạn với lệnh SELECT mà còn đẩy nhanh tốc độ tìm kiếm bản ghi trong quá trình xử lý UPDATE , DELETE(theo WHERE)。

nhược điểm

Chi phí của INSERT, UPDATE, DELETE tăng lên. Hơn nữa, có thể không ảnh hưởng đến tốc độ hoặc tốc độ bị giảm đi theo chỉ số

  • CẬP NHẬT Khi thay đổi, cập nhật cột có đánh chỉ mục thì chỉ mục cũng được cập nhật theo tốc độ bị châm Lượng cập nhật dữ liệu và chỉ số lượng sẽ ảnh hưởng đến tốc độ Chỉ mục không cập nhật dữ liệu thì sẽ không bị thay đổi(do that not

  • XÓA phải tiến hành cập nhật toàn bộ chỉ mục của bảng theo bản ghi xóa nên dẫn đến tốc độ chậm Thời gian cần để xóa tỷ lệ thuận với chỉ số lượng

  • INSERT Khi insert record thì đồng thời việc insert index cũng tăng lên dẫn đến tốc độ cũng bị chậm đi

Đặc điểm của cột nên tạo chỉ mục
  • Trong trường hợp bản ghi tìm kiếm với số lượng ít , lượng dữ liệu trong bảng nhiều

  • Hay được sử dụng như điều kiện của mệnh đề ORDER BY , diều kiện kết quả , điều kiện của WHERE Tuy nhiên, sẽ không cần đánh chỉ mục nếu tất cả các lần quét đều là mục tiêu của bảng

  • Vì dữ liệu có nhiều dữ liệu NULL nên sẽ tìm kiếm bên ngoài giá trị NULL Do Index không bao gồm giá trị NULL nên Index sẽ có hiệu quả khi tìm kiếm bên ngoài giá trị NULL

Đặc điểm của cột không nên tạo chỉ mục
  • Trong trường hợp tìm kiếm lượng bản ghi lớn từ bảng hoặc kích thước của bảng bé
  • Không có điều kiện logic ở đâu
  • Giá trị của cột hay phải chèn , cập nhật , xóa Nếu chèn dòng mới vào bảng , thì giá trị chỉ mục cũng tự động được đưa vào. Do đó tốc độ tìm kiếm dữ liệu cũng nhanh hơn nhưng khi phát sinh duy trì chỉ mục thông qua xử lý chèn, cập nhật, xóa thì tốc độ sẽ giảm xuống
  • Sử dung như điều kiện của mệnh đề WHERE nhưng cột được tham chiếu như một phần của cơn mê thức
Cách tạo chỉ mục

In the normal field

ALTER TABLE landing_pages ADD INDEX index_name(user_id)

Chúng ta cũng có thể đánh chỉ mục một phần của trường đánh giá. VD bên dưới là đánh chỉ mục cho 4 byte đầu tiên của last_name

ALTER TABLE phone_book ADD INDEX (last_name(4))

Theo như ví dụ trên thì dung lượng cần thiết của dữ liệu đánh chỉ số sẽ giảm, hiệu quả đánh chỉ số sẽ tăng lên. Tuy nhiên, sẽ xảy ra trường hợp giá trị Index giống nhau ở nhiều bản ghi

Trong trường hợp chỉ mục nhiều cột

Chúng ta có thể đánh chỉ mục cho nhiều cột như sau

ALTER TABLE phone_book ADD INDEX (last_name, first_name)

Trong trường hợp đánh nhiều như thế này có câu hỏi được đặt ra là việc tạo 2 chỉ mục có vấn đề gì không? . Theo đó , trong trường hợp đánh Index riêng cho từng first_name và last_name thì MySQL sẽ chọn một trong hai chỉ mục mà MySQL sẽ phán đoán dựa trên kinh nghiêm để xác định ra Index nào ứng với dòng ít hơn Nếu sử dụng nhiều cột Index , Index

chỉ mục duy nhất

ALTER TABLE phone_book ADD UNIQUE(phone_number)

Khi đánh vào Chỉ mục duy nhất, không chỉ là tìm bản đồ bản ghi với truy vấn, mà giá trị chỉ định của cột tương ứng chỉ xuất hiện một lần (trừ trường hợp NULL), Nói cách khác là khi chèn hoặc cập nhật bản ghi cần phải kiểm tra tất cả

Xóa chỉ mục

 

ALTER TABLE table_name DROP INDEX index_name;
Khi nào cần sử dụng Index

Khi nào nên sử dụng

  1. When so sánh giá trị của trường với số chỉ định VD. Ở ĐÂU tên = "hogehoge"

  2. Khi THAM GIA toàn bộ giá trị của tệp VD. Nơi một. tên = b. Tên

  3. Khi cần giới hạn phạm vi giá trị của trường bằng các so sánh toán tử[=、>、>=、<、<=]

  4. Khi cố định giá trị đầu tiên của chuỗi theo LIKE

  5. NHỎ NHẤT LỚN NHẤT()

  6. Có thể ORDER BY, GROUP BY dựa trên tiền tố của chuỗi

  7. Trường hợp nếu tất cả các trường của WHERE có một phần chỉ mục (không tham khảo toàn bộ DB)

  8. Khi áp dụng mệnh đề GIỮA hoặc TRONG

Khi không nên sử dụng

  1. Khi bắt đầu LIKE bằng ký tự đại diện

  2. Khi Mysql được xác nhận rằng việc đọc toàn bộ DB sẽ nhanh hơn

  3. Thông thường chỉ mục sẽ không sử dụng ORDER BY

  4. Khi trường ORDER BY và WHERE khác nhau nhưng chỉ đánh chỉ mục trên một tệp

  5. Trong trường hợp dữ liệu dưới 1000 bản ghi, mặc dù đánh chỉ mục nhưng không thể sử dụng được

Đánh giá truy vấn sử dụng Index thông qua giải thích

GIẢI THÍCH

EXPLAIN là công cụ trợ giúp tìm hiểu và truy vấn đánh giá MYSQL chạy bên trong như thế nào Đưa ra truy vấn tối ưu Cách sử dụng EXPLAIN. gắn GIẢI THÍCH trước câu lệnh CHỌN Đánh giá đánh giá và hiểu rõ hiệu suất của truy vấn nên thực hiện GIẢI THÍCH trên lượng dữ liệu có thể thực hiện trên môi trường thực hoặc dàn dựng

kiểm tra loại

Biến này cho chúng ta một thông tin rất quan trọng, đó là "cách thức" truy cập vào bảng sử dụng trong truy vấn đó. vào cách truy cập chúng ta sẽ có cách truy cập "nhanh" và cách "truy cập" chậm. Biến này là biến chính để giúp chúng ta điều chỉnh chỉ mục cho cơ sở dữ liệu

  • ALTER TABLE phone_book ADD INDEX (last_name(4))
    
    1. Khi mà bảng được truy cập, hãy sử dụng PRIMARY KEY, hoặc sử dụng chỉ mục cho bất kỳ trường nào mà giá trị của trường đó là ĐỘC ĐÁO. Khi gõ là const chúng ta sẽ có tốc độ truy cập vào bảng "nhanh nhất"
  • ALTER TABLE phone_book ADD INDEX (last_name(4))
    
    2. giống như const nhưng trường được sử dụng không đứng riêng mà nằm trong câu lệnh THAM GIA
  • ALTER TABLE phone_book ADD INDEX (last_name(4))
    
    3. Khi trường được tìm kiếm đã được đánh chỉ mục, tuy nhiên trường đó không phải là ĐỘC ĐÁO, và trường đó được sử dụng trong phép so sánh Where =
  • ALTER TABLE phone_book ADD INDEX (last_name(4))
    
    4. Khi trường được tìm kiếm có dán chỉ mục và được sử dụng khi cho phép tìm theo phạm vi Where In hoặc là Where > hay Where <
  • ALTER TABLE phone_book ADD INDEX (last_name(4))
    
    5. khi đã dán chỉ mục cơ sở để tìm ra kết quả thì mysql bắt buộc phải quét toàn bộ trường, làm như vậy sẽ rất chậm
  • ALTER TABLE phone_book ADD INDEX (last_name(4))
    
    0. Đây là khi không có trường nào không đánh chỉ mục, mà lại còn phải quét toàn bộ trường, đây chính là nơi bạn bắt buộc phải điều chỉnh, không thì sẽ rất chậm

Khác

  1. Các mục kiểm tra là 「possible_keys」 「key」 「Extra」
  • ALTER TABLE phone_book ADD INDEX (last_name(4))
    
    1 Liệt kê tất cả các khóa mà trình tối ưu hóa của mysql có thể sử dụng được chỉ mục của chúng để tìm kiếm
  • ALTER TABLE phone_book ADD INDEX (last_name(4))
    
    2 Trình tối ưu hóa công thức chính được sử dụng để lập chỉ mục để tìm kiếm
  • ALTER TABLE phone_book ADD INDEX (last_name(4))
    
    3 Đây cũng là một thông số rất quan trọng để điều chỉnh truy vấn mysql. Trình tối ưu hóa này có thể thực hiện như thế nào để thực hiện truy vấn đó. Chỉ cần nhìn thêm thì bạn sẽ hiểu được tổng quan nhưng có gì xảy ra đằng sau một truy vấn nào đó
  1. Sử dụng kết hợp Sử dụng sắp xếp tệp và Sử dụng tạm thời

  2. ALTER TABLE phone_book ADD INDEX (last_name(4))
    
    4 Khi trong truy vấn của chúng ta có đơn đặt hàng theo thời hạn thì thông tin lấy về sẽ cần phải sắp xếp. Sử dụng filesort nói lên điều đó

  3. ALTER TABLE phone_book ADD INDEX (last_name(4))
    
    5 Khi mà trong truy vấn chúng ta phải sắp xếp kết quả của JOIN , hay là trong truy vấn có cách sử dụng khác biệt thì MySQL sẽ phải tạo "bảng tạm" để thực hiện công việc này

  4. Trong trường hợp hệ thống tiến trình xử lý thời gian thực cần cải thiện xử lý nếu hiển thị cả hai Sử dụng filesort và Sử dụng tạm thời