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
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:
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ủ.
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ệu và bộ nhớ cache thủ tục và trong Oracle, nó được gọi là bộ đệm đệm bộ đệm và SGA. 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ỏ.
- 1. Tìm số hoạt động tối thiểu cần thiết để tính toán số sử dụng phạm vi số được chỉ định
- 2. Thiết lập tối thiểu cần thiết để triển khai một ứng dụng .NET với máy khách Oracle 11 là gì?
- 3. TD width - mức tối thiểu cần thiết sử dụng CSS
- 4. Các tệp tối thiểu cần thiết để triển khai máy chủ webAPI
- 5. Là chỉ mục cần thiết cho khóa chính trong SQLite?
- 6. java có xếp hàng ưu tiên tối thiểu được lập chỉ mục không?
- 7. Xác định những cái lọ tối thiểu là cần thiết cho một tính năng
- 8. Kích thước họa tiết cần thiết tối thiểu để tuân thủ OpenGL-ES 2.0 trên Android?
- 9. Chỉ thoát những gì cần thiết, là có thể?
- 10. Mustache.js + jQuery: ví dụ làm việc tối thiểu là gì?
- 11. Số bước tối thiểu cần thiết để biến tất cả các bit nhị phân thành một trạng thái
- 12. Làm cách nào để tìm ra số ký tự tối thiểu để tạo palindrome?
- 13. WCF - Là chứng chỉ dịch vụ cần thiết để xác thực khách hàng?
- 14. Cây Spanning tối thiểu: Thuộc tính Cut là gì?
- 15. Chỉ mục là gì?
- 16. Tên chỉ mục SQL cho là gì?
- 17. Bộ tối thiểu các loại bắt buộc để biên dịch mã 'async` là gì?
- 18. Cách thay đổi kích thước các cột trong QTreeWidget thành không gian tối thiểu cần thiết
- 19. Làm thế nào để tạo ra "chỉ số" cần thiết cho NSIndexPath: indexPathWithIndexes: chiều dài:
- 20. Tìm điểm mà tổng khoảng cách để thiết lập các điểm khác là tối thiểu
- 21. Eclipse: Cài đặt Eclipse tối thiểu cần cho một bản xây dựng PDE không đầu là gì?
- 22. Hình vuông tối thiểu trọng số - R
- 23. Entity Framework 5.0 - phiên bản .NET Framework tối thiểu cần thiết? .Net 4.0 hoặc 4.5?
- 24. Khi nào cần tạo chỉ mục SQL Server mới?
- 25. Tìm số tối thiểu và tối đa trong trăn
- 26. Rails Tạo lỗi ném tối thiểu?
- 27. Cần đếm hàng sau câu lệnh SELECT: cách tiếp cận SQL tối ưu là gì?
- 28. Cách trả lại tất cả các chỉ số tối thiểu theo số
- 29. tốt hơn là nên đặt thêm logic vào mệnh đề ON của bạn hoặc nó chỉ có tối thiểu cần thiết?
- 30. Kiếm giá tối thiểu trong giỏ hàng Magento
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
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. –
"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. –