2010-07-03 25 views
15

Tôi có một Người dùng bảng có nhiều chỉ mục. Một trong số đó là một chỉ mục duy nhất trên cột AccountIdentifier.Tại sao truy vấn sql này thực hiện tra cứu chính?

Vì đây là chỉ mục duy nhất, tại sao cần tìm kiếm khóa ngoài chỉ mục tìm kiếm? Chỉ mục tìm kiếm các chú giải công cụ báo cáo rằng chỉ có một bản ghi được trả về. Tôi cũng đã thử chuyển đổi chỉ mục thành loại "khóa duy nhất".

alt text http://s3.amazonaws.com/brandonc.baconfile.com/pitchurs/tmp/capture_2.png

+2

Ngoài ra: không bao giờ thực hiện 'SELECT *' trên hệ thống sản xuất - ** KHÔNG BAO GIỜ ** - không có ngoại lệ. Đây là thực hành không tốt để bắt đầu với .... –

Trả lời

17

Bởi vì nó là lựa chọn *.

Công cụ này sử dụng chỉ mục không nhóm để định vị (các) hàng nhưng sau đó cần truy cập và tìm nạp dữ liệu để trả về.

Để tránh bookmark lookup bạn sẽ cần phải thực hiện các chỉ số phi nhóm một chỉ số bao phủ (lý tưởng bằng cách giảm số lượng cột trong danh sách lựa chọn nhưng có thể cũng bằng cách thêm cột mới vào chỉ mục bản thân hoặc như included columns)

Nếu bạn có chỉ mục nhóm trên bảng, công cụ định vị hàng trong chỉ mục không nhóm sẽ bao gồm khóa chỉ mục được nhóm để không cần tra cứu dấu trang để đáp ứng các truy vấn chỉ trên các cột chỉ mục được nhóm AccountIdentifier và nhóm.

+1

Tôi đã thực hiện một số thử nghiệm. Vì vậy, nó sẽ có vẻ lựa chọn bất cứ điều gì không có trong chỉ số được sử dụng kết quả trong một tra cứu quan trọng. Điều đó có ý nghĩa. –

+1

@BC - Về cơ bản có nhưng nếu bạn có chỉ số nhóm, bạn có thể xem xét các cột đó sẽ được bao gồm tự động. –

13

Tra cứu chính không có nghĩa là "tra cứu khóa", nhưng "tra cứu hàng dựa trên khóa".

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