Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL数据库-哈希多个主键_Sql_Performance_Optimization_Hash - Fatal编程技术网

SQL数据库-哈希多个主键

SQL数据库-哈希多个主键,sql,performance,optimization,hash,Sql,Performance,Optimization,Hash,我想问一下,在哪些情况下,散列SQL表的主键(如果有多个主键)是一个不错的选择。(将主键列添加为普通列,并添加单个主键列,在所有主键之上包含哈希)? 性能是否有任何改进,或者一个好的SQL实现是否能够自己做到这一点 如果这导致性能改进,将改进哪些说明 T首先,并非所有数据库都支持哈希索引,因此您的问题与数据库高度相关。我注意到这一点,因为您的问题没有指定数据库 第二,即使在有哈希索引的数据库中,主键也可能不支持哈希索引 数据库中使用的标准B树索引对于主键来说已经足够了。散列索引在某些重要方面不同

我想问一下,在哪些情况下,散列SQL表的主键(如果有多个主键)是一个不错的选择。(将主键列添加为普通列,并添加单个主键列,在所有主键之上包含哈希)? 性能是否有任何改进,或者一个好的SQL实现是否能够自己做到这一点

如果这导致性能改进,将改进哪些说明


T

首先,并非所有数据库都支持哈希索引,因此您的问题与数据库高度相关。我注意到这一点,因为您的问题没有指定数据库

第二,即使在有哈希索引的数据库中,主键也可能不支持哈希索引

数据库中使用的标准B树索引对于主键来说已经足够了。散列索引在某些重要方面不同于B树。但值得注意的是,散列索引只支持相等操作,而不支持不等式

散列索引的查找时间接近O(1)(但不要忘记,散列表可能会发生冲突,并且可能需要溢出到磁盘上)。对于B树来说,这比O(logn)时间稍微好一点——但是对数非常小,即使在数百万或数十亿行数据上也是如此

实际上,我看不出有任何强有力的理由使用散列索引作为主键,即使数据库支持它。如果我要创建一个合理的用例,我将从一个大规模并行分布式数据库开始,在这个数据库中主键也将用于分发数据