在很多系统设计的时候包括OS,SQL Server很多方面都用到了HASH大大提高了系统的性能,其实我们也可以利用SQL Server的HASH函数实现相同的效果。 比如对长String的Text创建HASH索引快速提高查询能力,可以用来比较表数据差异。
下面有两个例子:
1.用于比较两表的数据异同.
例如找出在T1有,T表没有的记录。
SELECT*
FROMT1
WHERECHECKSUM(*)
NOTIN(SELECTCHECKSUM(*)FROMT)
2.用于创建计算列索引
下列示例显示使用CHECKSUM 生成哈希索引。通过将计算校验和列添加到索引的表中,然后对校验和列生成索引来生成哈希索引。
– Create a checksum index.
SET ARITHABORTON;
USEAdventureWorks;
GO
ALTER TABLE Production.Product
ADD cs_Pname ASCHECKSUM(Name);
GO
CREATE INDEX Pname_indexONProduction.Product(cs_Pname);
GO
校验和索引可用作哈希索引,尤其是当要索引的列为较长的字符列时可以提高索引速度。校验和索引可用于等价搜索。
/*Use the index in a SELECT query. Add a second search
condition tocatch stray cases where checksums match,
but the valuesare not the same.*/
SELECT *
FROM Production.Product
WHERE CHECKSUM(N’Bearing Ball’)=cs_Pname
AND Name = N’Bearing Ball’;
GO