zoukankan      html  css  js  c++  java
  • 哈希索引

    hash函数编辑

    Hash,一般翻译做"散列",也有直接音译为"哈希"的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要函数

     

    哈希索引

    SQL Server 2014

    <?XML:NAMESPACE PREFIX = "[default] http://www.w3.org/1999/xhtml" NS = "http://www.w3.org/1999/xhtml" />索引用作内存优化表的入口点。 从表读取行需要借助索引在内存中定位数据。

    哈希索引包含以数组形式组织的 Bucket 集合。 哈希函数将索引键映射到哈希索引中对应的 Bucket。 下图展示映射到哈希索引中三个不同 Bucket 的三个索引键。 出于演示目的,哈希函数的名称为 f(x)。

    映射到不同 Bucket 的索引键。

    用于哈希索引的哈希函数具有以下特征:

    • SQL Server 拥有一个用于所有哈希索引的哈希函数。

    • 哈希函数具有确定性。 同一索引键始终映射到哈希索引中的同一 Bucket。

    • 多个索引键可能映射到同一个哈希 Bucket。

    • 哈希函数经过均衡处理,这意味着索引键值在哈希桶上的分布通常符合泊松分布。

      泊松分布并非均匀分布。 索引键值并非均匀地分布在哈希 Bucket中。 例如,n 个不同索引键在 n 个哈希桶上的泊松分布导致约三分之一为空桶,三分之一的桶包含一个索引键,另外三分之一包含两个索引键。 少量 Bucket 将包含两个以上的键。

    如果两个索引键映射到同一个哈希 Bucket,则产生哈希冲突。 大量哈希冲突可影响读取操作的性能。

    内存哈希索引结构包含一个内存指针数组。 每个 Bucket 映射到该数组中的一个偏移位置。 数组中的每个 Bucket 指向该哈希 Bucket 中的第一行。 Bucket 中的每行指向下行,因而形成了每个哈希 Bucket 的行链,如下图所示。

    内存中哈希索引结构。

    该图有三个包含行的 Bucket。 顶部的第二个 Bucket 包含三个红色行。 第四个 Bucket 包含一个蓝色行。 底部的 Bucket 包含两个绿色行。 这些可能是同一行的不同版本。

    有关内存优化表的索引的详细信息,请参阅在内存优化表上使用索引的指导原则

    请参阅

    概念

    内存优化表索引简介

  • 相关阅读:
    常用的一些js方法
    git常用命令
    thread join和detach的区别
    C和C++的区别和联系
    C++面试集锦( 面试被问到的问题 )
    C/C++面试题:编写类String的构造函数、析构函数和赋值函数。
    C++ 多态的实现及原理
    获取当前操作系统的ip
    CString的头文件
    C++ 多用户模式下同一个exe只能运行一次
  • 原文地址:https://www.cnblogs.com/suizhikuo/p/4322969.html
Copyright © 2011-2022 走看看