什么时候使用hash index?我知道hashing的理论:当通过哈希搜索某个东西时,它在<或>上不具有可比性,它只能相等或不相等。因此,与BTree相反,它不能执行分治搜索,而是试图精确。但我不明白什么时候有用?
<
>
q3aa05251#
哈希索引比b树索引更快--至少在理论上是这样。一个b-树索引需要O(log n)的搜索工作。哈希索引更接近于常数时间。考虑到性能的改进,它们有时是有用的。通常不需要不等式和排序。
xtfmy6hx2#
哈希索引对于相等查询非常有用,即当您在表中查找特定元素时(例如,WHERE id=1)。在这种情况下,哈希索引理论上更快。另一方面,如果你还需要搜索元素的范围(例如,WHERE id>1和id<10),那么哈希索引是无用的,你需要btree。
nbewdwxp3#
在PostgreSQL中,btree索引对索引条目的大小有一个硬性限制,大约是块大小的1/3。因此,如果即使是0.00001%的表行的值可能比限制长,您就有问题了。哈希索引避免了这种限制。
3条答案
按热度按时间q3aa05251#
哈希索引比b树索引更快--至少在理论上是这样。一个b-树索引需要O(log n)的搜索工作。哈希索引更接近于常数时间。
考虑到性能的改进,它们有时是有用的。通常不需要不等式和排序。
xtfmy6hx2#
哈希索引对于相等查询非常有用,即当您在表中查找特定元素时(例如,WHERE id=1)。在这种情况下,哈希索引理论上更快。
另一方面,如果你还需要搜索元素的范围(例如,WHERE id>1和id<10),那么哈希索引是无用的,你需要btree。
nbewdwxp3#
在PostgreSQL中,btree索引对索引条目的大小有一个硬性限制,大约是块大小的1/3。因此,如果即使是0.00001%的表行的值可能比限制长,您就有问题了。哈希索引避免了这种限制。