2008-08-27 18 views
6

Tôi có một bảng với hàng triệu hàng. Tôi cần phải tìm tất cả các hàng với một giá trị cột cụ thể. Cột đó không có trong chỉ mục, do đó, kết quả quét bảng.Quét bảng so với Thêm chỉ mục - nhanh hơn?

Nhưng sẽ nhanh hơn khi thêm chỉ mục với cột ở đầu (phím chính sau), thực hiện truy vấn, sau đó thả chỉ mục?

Tôi không thể thêm chỉ mục vĩnh viễn khi người dùng đang chỉ định cột họ đang tìm kiếm.

Trả lời

2

Việc thêm chỉ mục yêu cầu quét bảng, vì vậy nếu bạn không thể thêm chỉ mục vĩnh viễn, có vẻ như một lần quét sẽ nhanh hơn (hơi).

2

Không, điều đó sẽ không nhanh hơn. Điều gì sẽ là nhanh hơn là chỉ cần thêm chỉ mục và để nó ở đó!

Tất nhiên, có thể không thực tế để lập chỉ mục mỗi cột, nhưng sau đó lại có thể. Dữ liệu được thêm vào bảng như thế nào?

2

Nó sẽ không được. Việc tạo một chỉ mục phức tạp hơn là chỉ quét cột, ngay cả khi độ phức tạp tính toán là như nhau.

Điều đó cho biết - bạn có bao nhiêu cột? Bạn có chắc là bạn không thể tạo chỉ mục cho mỗi người trong số họ nếu thời gian truy vấn cho một lần tìm kiếm quá dài?

7

Tôi không có DBA, nhưng tôi đoán rằng việc xây dựng chỉ mục sẽ yêu cầu quét bảng.

Trừ khi có nhiều truy vấn trên cột đó, tôi khuyên bạn không nên tạo chỉ mục.

Tốt nhất nên kiểm tra các kế hoạch giải thích/thời gian thực hiện cho cả hai cách!

2

Tùy thuộc vào độ phức tạp của truy vấn của bạn. Nếu bạn đang truy xuất dữ liệu một lần, sau đó thực hiện quét bảng nhanh hơn. Tuy nhiên, nếu bạn quay trở lại bảng nhiều lần cho thông tin liên quan trong cùng một truy vấn, thì chỉ mục sẽ nhanh hơn.

Một chiến lược khác có liên quan là thực hiện quét bảng và đặt tất cả dữ liệu vào bảng tạm thời. Sau đó, chỉ mục THAT và sau đó bạn có thể thực hiện tất cả các lựa chọn, nhóm và các truy vấn khác của bạn trên tập con của dữ liệu được lập chỉ mục. Lợi ích của việc tìm kiếm thông tin liên quan trong các bảng có liên quan bằng cách sử dụng bảng tạm thời là MUCH nhanh hơn.

Tuy nhiên, không gian giá rẻ trong những ngày này, vì vậy bạn có thể phục vụ tốt nhất bằng cách kiểm tra cách người dùng của bạn sử dụng hệ thống của bạn và thêm chỉ mục trên các cột thường xuyên đó. Tôi chưa thấy người dùng sử dụng TẤT CẢ các tham số tìm kiếm TẤT CẢ thời gian.

3

Như mọi người khác đã nói, chắc chắn sẽ không nhanh hơn để thêm chỉ mục so với việc quét toàn bộ cột đó.

Tuy nhiên, tôi khuyên bạn nên theo dõi mẫu truy vấn và tìm ra (các) cột nào được tìm kiếm nhiều nhất và thêm các chỉ mục ít nhất cho chúng. Bạn có thể thấy rằng 3-4 chỉ mục tăng tốc 90% truy vấn của bạn.

9

Hai câu hỏi để suy nghĩ về:

  1. bao nhiêu cột có thể được đề cử cho truy vấn?
  2. Dữ liệu có thay đổi thường xuyên không? Rất nhiều của nó?

Nếu bạn có một số nhỏ các cột ứng cử viên, và các dữ liệu không thay đổi rất nhiều, sau đó bạn có thể muốn cân nhắc thêm một chỉ số thường trực trên bất kỳ hoặc thậm chí tất cả các cột ứng cử viên.

"Ngụ ý!", tôi nghe thấy. Hầu hết các nguồn cho bạn biết "không bao giờ" lập chỉ mục mỗi cột của một bảng, nhưng điều đó được khuyên là bắt nguồn từ giả định chung chung rằng các bảng được sửa đổi thường xuyên.

Bạn sẽ trả giá trong bộ nhớ bổ sung, cũng như lần truy cập hiệu suất khi dữ liệu thay đổi.

Nhỏ như thế nào là nhỏ và số tiền là rất nhiều và sự cân bằng có đáng giá không? Không có cách nào để nói với một linh mục vì "quá chậm" thường là một phép đo chủ quan.

Bạn sẽ phải dùng thử, đo kích thước chỉ mục của bạn và sau đó là hiệu ứng mà chúng có trong các tìm kiếm. Bạn sẽ phải cân bằng chi phí để tăng sự hài lòng của khách hàng.

[Đã thêm] Ồ, một điều nữa: chỉ mục tạm thời không chỉ chậm hơn so với quét bảng mà còn phá hủy đồng thời của bạn. Việc lập chỉ mục lại một bảng thường (luôn luôn?) Yêu cầu khóa bảng đầy đủ, do đó, chỉ có thể thực hiện một lần tìm kiếm người dùng tại một thời điểm.

Chúc may mắn.

2

Giải pháp của bạn sẽ không mở rộng trừ khi bạn thêm chỉ mục vĩnh viễn vào mỗi cột, với tất cả các cột được trả về trong truy vấn trong danh sách các cột được bao gồm (chỉ mục bao gồm). Các chỉ mục này sẽ rất lớn và chèn và cập nhật lên bảng đó sẽ chậm hơn một chút, nhưng bạn không có nhiều lựa chọn nếu bạn cho phép người dùng tùy ý chọn cột tìm kiếm.

Có bao nhiêu cột? Tần suất dữ liệu được cập nhật? Chèn và cập nhật nhanh như thế nào cần chạy? Có sự cân bằng liên quan, tùy thuộc vào câu trả lời cho những câu hỏi đó. Thực hiện nhiều thử nghiệm và thử nghiệm để bạn biết chắc chắn mọi thứ sẽ hoạt động như thế nào.

Nhưng đối với câu hỏi ban đầu của bạn, việc thêm và bỏ chỉ mục cho một truy vấn chỉ mang lại lợi ích nếu bạn thực hiện nhiều lựa chọn trong truy vấn (ví dụ, chọn trong truy vấn phụ sẽ chạy cho mỗi hàng được trả lại).