SQLServer性能优化–间接实现函数索引或者Hash索引

2020-07-06 05:55:43易采站长站整理

3, 逻辑主键为多个字段的时候,在多了字段上生成一个“替代”性的唯一字段

某些情况下业务需求或者设计也好(比如没有达到第三范式,BC范式,第四范式,甚至是第五范式),在表连接的时候往往会有多个字段

比如这种样子:


SELECT *
FROM TableNameA a
INNER JOIN TableNameB b
ON a.key=b.key
AND a.Type = b.Type
AND a.Status = b.Staus
AND a.CreationTime = b.CreationTime
AND a.***=b.***
where ***

在表关联的时候,连接条件很多,如果是这样子,最好的情况就是建立一个较宽的复合索引,但是这样的话,索引的宽度和体积就变得很大,使用的时候效率也有一定的影响。这种情况就可以考虑在TableNameA 和 TableNameB 上,利用多个连接的字段(Key+Type +Status +CreationTime+***)做了类似于示例2中的一个计算列,在计算列上建立一个索引,然后再表连接的时候就可以用如下的方式替代


SELECT *
FROM TableNameA a
INNER JOIN TableNameB b
ON a.HashValue=b.HashValue
WHERE ***

总是,这是一种以空间换时间的思路(冗余存储一个类似于标识符的字段,提高查询效率),在生成“替代”字段的思想有两点,第一要足够的小,第二要原始值生成替代字段的唯一性

总结:SQLServer 中没有函数索引和Hash索引,而某些业务需求或者说是为了性能考虑,又需要类似的功能,通过类似于空间换时间的方法来实现,可以变通地来实现类似于函数索引或者Hash索引的功能,已达到其他数据库中函数索引和Hash索引的效果(虽然原理可能不一样)。需要注意的就是在生成计算列或者说Hash值替代的时候要注意计算方式,确保生成之后的Key值的唯一性。当然实现方式就可以根据需要自行选择了,条条大路通罗马。

您可能感兴趣的文章:win2008 r2 服务器php+mysql+sqlserver2008运行环境配置(从安装、优化、安全等)SQL Server 2016 查询存储性能优化小结谈谈Tempdb对SQL Server性能优化有何影响人工智能自动sql优化工具–SQLTuning for SQL Serversql语句优化之SQL Server(详细整理)SQL Server中的SQL语句优化与效率问题SQL Server游标的使用/关闭/释放/优化小结SQL SERVER性能优化综述(很好的总结,不要错过哦)SQLServer 优化SQL语句 in 和not in的替代方案SQL SERVER 的SQL语句优化方式小结

相关文章 大家在看