2009-12-28 29 views
5

Tôi đã tạo tập lệnh để tìm tính chọn lọc của mỗi cột cho tất cả các bảng. Trong một số bảng có ít hơn 100 hàng, độ chọn lọc của cột là hơn 50%. Nơi độ chọn lọc = Giá trị khác biệt/Tổng số hàng. Các cột đó có đủ điều kiện cho chỉ mục không? Hoặc, bạn có thể cho tôi biết yêu cầu tối thiểu đối với số hàng để tạo chỉ mục không?Số hàng tối thiểu cần thiết để tạo chỉ mục là gì?

Trả lời

5

Bạn có thể chỉ mục trên bất kỳ cột - câu hỏi là liệu nó làm cho bất kỳ ý nghĩa và cho dù chỉ số sẽ được sử dụng ....

Thông thường, một tính chọn lọc ít hơn 1-5% có thể làm việc - nhỏ hơn tỷ lệ phần trăm đó càng tốt. Tốt nhất là các giá trị đơn lẻ trong số lượng lớn, ví dụ: một ID khách hàng duy nhất trong số hàng trăm nghìn - những chỉ số đó chắc chắn sẽ được sử dụng.

Những thứ như giới tính (chỉ 2 giá trị) hoặc những thứ khác chỉ có một số lượng rất hạn chế các giá trị có thể thường không hoạt động tốt trên chỉ mục. Ít nhất là trên riêng của họ - các cột này có thể được chấp nhận vào một chỉ mục khác dưới dạng cột thứ hai hoặc thứ ba.

Nhưng thực sự, cách duy nhất để tìm hiểu xem hoặc không phải là một chỉ số có ý nghĩa là để

  • biện pháp truy vấn của bạn trước khi
  • tạo chỉ mục
  • chạy các truy vấn của bạn một lần nữa, kiểm tra kế hoạch thực hiện của họ , đo thời gian của chúng

Không có quy tắc vàng nào khi chỉ mục sẽ được sử dụng (hoặc bỏ qua) - quá nhiều biến phát trong quyết định đó.

Đối với một số chuyên gia tư vấn về cách đối phó với các chỉ số, và làm thế nào để tìm ra các chỉ số có thể không quen, và khi nó làm cho tinh thần để tạo ra một chỉ số, xem bài đăng trên blog Kimberly Tripp:

+0

Tôi có bảng có 3 giá trị liên tiếp và tất cả đều là dostinct. Khả năng chọn lọc đó là hơn 95%. Và bảng này chủ yếu được sử dụng chỉ với câu lệnh chọn. Vì vậy, nó là vật lý để tạo ra chỉ số về điều đó? – Paresh

+0

95% ý nghĩa chọn lọc? Theo nghĩa đen, bạn muốn có độ chọn lọc rất thấp - bạn muốn rằng một giá trị đơn (ID = 55) chỉ chọn một số lượng tối thiểu các hàng. Nếu lựa chọn của bạn trong kịch bản đó (tỷ lệ phần trăm số lượng hàng trong tổng số sẽ được chọn cho một giá trị nhất định của trường của bạn) dưới 5% hoặc tốt hơn thậm chí dưới 1%, thì chắc chắn có ý nghĩa đối với chỉ mục. –

+0

"Những điều như giới tính (chỉ có 2 giá trị)" bây giờ là năm 2018, phần này của câu trả lời của bạn đã lỗi thời. Giới tính nên là VARCHAR (255) kể từ bây giờ. Cá nhân tôi xác định là một máy bay trực thăng tấn công apache. –

0

tôi không chắc chắn về sql-server, nhưng hầu hết DBMS không sử dụng một chỉ số để thu hồi i f nó có thể lấy tất cả các hàng trong một I/O đơn. Bạn sẽ thấy điều này trên các giải thích của PLAN, một số bảng luôn được quét vùng bảng.

IMHO, bất kỳ bảng nào có dưới 5000 hàng đều không có giá trị phân tích cho số lượng thẻ nếu DBMS đang chạy trên máy chủ.

2

Hầu hết DBMS sử dụng bộ nhớ cache cho dữ liệu và mã (quy trình được lưu trữ, kế hoạch thực hiện, v.v.). Trong SQL Server, tôi cho rằng nó được gọi là dữ liệubộ nhớ cache thủ tục và trong Oracle, nó được gọi là bộ đệm đệm bộ đệmSGA. Dữ liệu bảng và/hoặc chỉ mục có thể nằm trong bộ nhớ cache.

Bảng nhỏ thường xuyên truy cập sẽ rất có thể phù hợp với bộ nhớ cache. Nhưng bảng có thể được gỡ bỏ khỏi bộ nhớ cache, giả sử, nếu truy vấn tải dữ liệu mới từ đĩa. Có các tùy chọn để cho biết rằng bạn muốn một bảng là vĩnh viễn trong bộ nhớ cache (Xem PINTABLE).Đó có thể là chiến lược tốt hơn khi sử dụng chỉ mục nếu bảng của bạn rất nhỏ (trường hợp của bạn). Việc thêm một chỉ mục (cũng sẽ luôn nằm trong bộ nhớ đệm) có thể giúp đỡ thêm, nhưng tôi không biết điều gì sẽ đạt được.

Sự khác biệt lớn về hiệu suất là truy cập đĩa so với truy cập bộ nhớ. Mục đích của chỉ số là để giảm lượng dữ liệu để đọc từ đĩa, nhưng nếu nó đã có trong bộ nhớ, có thể đạt được nhỏ.

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