Skip to content

B-Tree index in MySQL  #1

@phanstasmal

Description

@phanstasmal

B-Tree là cấu trúc dữ liệu được dùng để lưu trữ index nhằm tối ưu tốc truy vấn trong MySQL.
(Sử dụng explain để phân tích câu query trước khi thực thi)

Các loại truy vấn có thể sử dụng index với B-Tree:

Loại 1: Match the full value:

Query với đầy đủ giá trị của key được đánh index.
Index: KEY dwh_created_at (dwh_created_at,dwh_updated_at)
image

Loại 2: Match a leftmost prefix

Query sử dụng index khi tìm user_id bắt đầu bằng a
Index: KEY user_id (user_id)
image

Loại 3: Match a column prefix

Index được sử dụng khi column đầu tiên bên trái của index được sử dụng
Index: KEY dwh_created_at (dwh_created_at,dwh_updated_at)
image

Loại 4: Match a range of values

Index: KEY dwh_created_at (dwh_created_at,dwh_updated_at)
Index được sử dụng khi query trong 1 khoảng, nó cũng được áp dụng với cột đầu tiên bên trái của index
image

Loại 5: Match one part exactly and match a range on another part

Kết hợp nhiều index trên query
Index:
KEY user_id (user_id)
KEY dwh_created_at (dwh_created_at,dwh_updated_at)
image

Chú ý: Một số trường hợp index không được sử dụng

  • Trong khi truy vấn chúng ta muốn viết query sao cho càng ngăn gọn càng tốt nhưng đôi khi không để ý sẽ rơi vào trường hợp sau:
    Ví dụ: Lấy tất cả dữ liệu trong bảng được tạo ra vào ngày '2017-03-01' ta sử dụng hàm date(dwh_created_at), trường hợp này index sẽ không được sử dụng:
    KEY dwh_created_at (dwh_created_at,dwh_updated_at)
    image
    image
    Viết đúng phải là:
    image
    image
  • Sử dụng column thứ 2 trong index
    KEY dwh_created_at (dwh_created_at,dwh_updated_at)
    image
  • Ngại sử dụng like khi query:
    KEY user_id (user_id)
    image
    trong khi
    image

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions