Hướng dẫn how mysql index works - cách chỉ mục mysql hoạt động

8.3.1 & nbsp; cách MySQL sử dụng chỉ mục

Các chỉ mục được sử dụng để tìm các hàng có giá trị cột cụ thể một cách nhanh chóng. Không có chỉ mục, MySQL phải bắt đầu với hàng đầu tiên và sau đó đọc qua toàn bộ bảng để tìm các hàng có liên quan. Bảng càng lớn, chi phí này càng nhiều. Nếu bảng có một chỉ mục cho các cột được đề cập, MySQL có thể nhanh chóng xác định vị trí để tìm kiếm ở giữa tệp dữ liệu mà không phải xem tất cả dữ liệu. Điều này nhanh hơn nhiều so với đọc mỗi hàng tuần tự.

Hầu hết các chỉ số MySQL (PRIMARY KEY, UNIQUE, INDEXFULLTEXT) được lưu trữ trong các cây B. Ngoại lệ: Các chỉ mục trên các loại dữ liệu không gian sử dụng cây R; MEMORY Bảng cũng hỗ trợ các chỉ mục băm; InnoDB Sử dụng danh sách đảo ngược cho các chỉ mục FULLTEXT.

Nói chung, các chỉ mục được sử dụng như mô tả trong các cuộc thảo luận sau đây. Các đặc điểm cụ thể đối với các chỉ mục băm (như được sử dụng trong bảng MEMORY) được mô tả trong Phần & NBSP; 8.3.9, So sánh của B-Tree và Hash Indexes.

MySQL sử dụng các chỉ mục cho các hoạt động này:

  • Để tìm các hàng phù hợp với một mệnh đề

    SELECT key_part3 FROM tbl_name
      WHERE key_part1=1
    0 một cách nhanh chóng.

  • Để loại bỏ các hàng từ việc xem xét. Nếu có sự lựa chọn giữa nhiều chỉ mục, MySQL thường sử dụng chỉ mục tìm số lượng hàng nhỏ nhất (chỉ mục chọn lọc nhất).

  • Nếu bảng có chỉ số nhiều cột, bất kỳ tiền tố ngoài cùng bên trái của chỉ mục đều có thể được sử dụng bởi trình tối ưu hóa để tra cứu các hàng. Ví dụ: nếu bạn có chỉ mục ba cột trên

    SELECT key_part3 FROM tbl_name
      WHERE key_part1=1
    1, bạn đã lập chỉ mục các khả năng tìm kiếm trên
    SELECT key_part3 FROM tbl_name
      WHERE key_part1=1
    2,
    SELECT key_part3 FROM tbl_name
      WHERE key_part1=1
    3 và
    SELECT key_part3 FROM tbl_name
      WHERE key_part1=1
    4. Để biết thêm thông tin, xem Phần & NBSP; 8.3.6, Chỉ số nhiều cột của Hồi giáo.

  • Để truy xuất các hàng từ các bảng khác khi thực hiện tham gia. MySQL có thể sử dụng các chỉ mục trên các cột hiệu quả hơn nếu chúng được khai báo là cùng loại và kích thước. Trong bối cảnh này,

    SELECT key_part3 FROM tbl_name
      WHERE key_part1=1
    5 và
    SELECT key_part3 FROM tbl_name
      WHERE key_part1=1
    6 được coi là giống nhau nếu chúng được tuyên bố là cùng kích thước. Ví dụ,
    SELECT key_part3 FROM tbl_name
      WHERE key_part1=1
    7 và
    SELECT key_part3 FROM tbl_name
      WHERE key_part1=1
    8 có cùng kích thước, nhưng
    SELECT key_part3 FROM tbl_name
      WHERE key_part1=1
    7 và PRIMARY KEY0 thì không.

    Để so sánh giữa các cột Chuỗi không phân biệt, cả hai cột nên sử dụng cùng một bộ ký tự. Ví dụ, so sánh cột PRIMARY KEY1 với cột PRIMARY KEY2 ngăn chặn việc sử dụng chỉ mục.

    So sánh các cột không giống nhau (ví dụ so sánh cột chuỗi với cột tạm thời hoặc số) có thể ngăn chặn việc sử dụng các chỉ mục nếu các giá trị không thể được so sánh trực tiếp mà không chuyển đổi. Đối với một giá trị đã cho, chẳng hạn như PRIMARY KEY3 trong cột số, nó có thể so sánh bằng bất kỳ số lượng giá trị nào trong cột chuỗi như PRIMARY KEY4, PRIMARY KEY5, PRIMARY KEY6 hoặc PRIMARY KEY7. Quy tắc này sử dụng bất kỳ chỉ mục nào cho cột chuỗi.

  • Để tìm giá trị PRIMARY KEY8 hoặc PRIMARY KEY9 cho một cột được lập chỉ mục cụ thể UNIQUE0. Điều này được tối ưu hóa bởi bộ tiền xử lý kiểm tra xem bạn đang sử dụng UNIQUE1 = UNIQUE2 trên tất cả các phần chính xảy ra trước UNIQUE0 trong chỉ mục. Trong trường hợp này, MySQL thực hiện một tra cứu khóa duy nhất cho mỗi biểu thức PRIMARY KEY8 hoặc PRIMARY KEY9 và thay thế nó bằng một hằng số. Nếu tất cả các biểu thức được thay thế bằng các hằng số, truy vấn sẽ quay lại cùng một lúc. Ví dụ:

    SELECT MIN(key_part2),MAX(key_part2)
      FROM tbl_name WHERE key_part1=10;
  • Để sắp xếp hoặc nhóm một bảng nếu việc sắp xếp hoặc nhóm được thực hiện trên một tiền tố ngoài cùng bên trái của chỉ mục có thể sử dụng (ví dụ: UNIQUE6, UNIQUE7). Nếu tất cả các phần chính được theo sau bởi UNIQUE8, khóa được đọc theo thứ tự ngược lại. . 13, chỉ số giảm dần của người Viking.

  • Trong một số trường hợp, một truy vấn có thể được tối ưu hóa để truy xuất các giá trị mà không cần tham khảo các hàng dữ liệu. .

    SELECT key_part3 FROM tbl_name
      WHERE key_part1=1

Các chỉ mục ít quan trọng hơn đối với các truy vấn trên các bảng nhỏ hoặc các bảng lớn trong đó các truy vấn báo cáo xử lý hầu hết hoặc tất cả các hàng. Khi một truy vấn cần truy cập hầu hết các hàng, việc đọc tuần tự nhanh hơn so với làm việc thông qua một chỉ mục. Đọc tuần tự tối thiểu hóa đĩa tìm kiếm, ngay cả khi không phải tất cả các hàng là cần thiết cho truy vấn. Xem Phần & NBSP; 8.2.1.23, Tránh các lần quét bảng đầy đủ để biết chi tiết.