Bạn chỉ có thể truy cập các yếu tố bằng khóa chính của chúng trong một thẻ bắt đầu bằng #. Đây là nhanh hơn so với một thuật toán cây (O(1)
thay vì log(n)
), nhưng bạn không thể chọn dãy (tất cả mọi thứ ở giữa x
và y
). Thuật toán cây hỗ trợ điều này trong Log(n)
trong trường hợp chỉ mục băm có thể dẫn đến quét toàn bộ bảng O(n)
. Ngoài ra chi phí liên tục của các chỉ mục băm thường lớn hơn (không có yếu tố trong ký hiệu theta, nhưng nó vẫn tồn tại). Ngoài ra thuật toán cây thường dễ bảo trì hơn, phát triển với dữ liệu, tỷ lệ, v.v.
Chỉ mục băm làm việc với kích thước băm được xác định trước, vì vậy bạn kết thúc với một số "nhóm" nơi đối tượng được lưu trữ. được lặp lại để thực sự tìm thấy đúng bên trong phân vùng này.
Vì vậy, nếu bạn có kích thước nhỏ, bạn có rất nhiều chi phí cho các yếu tố nhỏ, kích thước lớn dẫn đến quét thêm.
Thuật toán bảng băm diễn ra thường là tỷ lệ, nhưng tỷ lệ có thể không hiệu quả.
Thực sự có các thuật toán băm có thể mở rộng. Đừng hỏi tôi làm thế nào điều đó hoạt động - đó là một điều vô cùng với tôi. AFAIK chúng phát triển từ nhân rộng có thể mở rộng, nơi việc băm lại không dễ dàng.
của nó được gọi là RUSH - R eplication U nder S calable H tro, và do đó những thuật toán được gọi là thuật toán RUSH.
Tuy nhiên, có thể có một điểm mà chỉ mục của bạn vượt quá kích thước có thể chấp nhận được so với kích thước băm và toàn bộ chỉ mục của bạn cần được xây dựng lại. Thông thường đây không phải là một vấn đề, nhưng đối với cơ sở dữ liệu khổng lồ lớn, điều này có thể mất vài ngày.
Việc trao đổi thuật toán cây nhỏ và chúng phù hợp cho hầu hết mọi trường hợp sử dụng và do đó là mặc định.
Tuy nhiên nếu bạn có trường hợp sử dụng rất chính xác và bạn biết chính xác điều gì và chỉ những gì sẽ cần, bạn có thể tận dụng các chỉ mục băm.
Nguồn
2011-09-05 09:58:30
băm bảng để không hỗ trợ các truy vấn phạm vi và không thể phát triển hoặc thu gọn suốt trong quá trình hoạt động. –
@HenningMakholm Tại sao không băm cho các cột không cần truy vấn phạm vi? – Pacerier