2011-02-06 38 views

Trả lời

3

Có lẽ có, trừ khi

  • Bảng này có rất ít hàng (< 1000)
  • Cột int có tính chọn lọc kém
  • một tỷ lệ lớn của bảng đang được trả lại (nói> 1%)

Trong trường hợp đó, quét bảng có thể có ý nghĩa hơn, và trình tối ưu hóa có thể chọn thực hiện. Trong hầu hết các trường hợp, dù sao chỉ mục không phải là rất có hại, nhưng bạn chắc chắn nên thử nó và xem (trong phòng thí nghiệm của bạn, trên phần cứng cấp sản xuất với bộ dữ liệu giống sản xuất)

2

Có. Nó không quan trọng kiểu dữ liệu mà cột có. Nếu bạn không chỉ định một chỉ mục, mysql phải quét toàn bộ bảng bất cứ lúc nào bạn đang tìm kiếm một giá trị với cột đó.

+0

Có lẽ không phải trên boolean. được thông báo. Ví dụ. Xem này: http://stackoverflow.com/questions/10524651/is-there-any-performance-gain-in-indexing-a-boolean-field – dennis

4

Có, chỉ mục trên bất kỳ cột nào có thể làm cho truy vấn hoạt động nhanh hơn bất kể loại dữ liệu nào. Bản thân dữ liệu là những gì quan trọng - không có điểm trong việc sử dụng một chỉ mục nếu chỉ có hai giá trị hiện tại trong hệ thống.

Cũng lưu ý rằng:

  • sự hiện diện của một chỉ số không đảm bảo nó sẽ được sử dụng - bảng thống kê cần phải được hiện tại, nhưng nó thực sự phụ thuộc vào truy vấn.
  • MySQL cũng chỉ cho phép một chỉ mục cho mỗi SELECT và có một số lượng giới hạn không gian cho chỉ mục (limit dependent on engine).
+0

+1: Thông tin thêm :) – shamittomar

+0

"MySQL cũng chỉ cho phép một chỉ mục mỗi SELECT, và có một số lượng giới hạn không gian cho các chỉ mục "- KHÔNG ?! (Hoặc tôi chỉ hiểu lầm bạn. Bạn có muốn trích dẫn một số tài liệu nêu rõ điều này không?) – yankee

+0

@yankee: Khi bạn xem kế hoạch GIẢI THÍCH, MySQL chỉ có thể sử dụng một chỉ mục cho mỗi câu lệnh mà EXPLAIN thấy. Truy vấn phụ sẽ là một SELECT riêng biệt, ví dụ. –

0

Có, toàn bộ điểm trên chỉ mục là bạn tạo chúng bằng primary key hoặc bằng cách thêm chỉ mục thủ công. Loại cột không nói gì về tốc độ truy vấn.

0

Có, nó phải được lập chỉ mục. Việc chỉ mục các cột tinyint là không hợp lý nếu chúng được sử dụng làm boolean, vì chỉ mục này sẽ không đủ chọn lọc.

Các vấn đề liên quan