高效计算多列中的不同值
在需要确定多列中唯一组合的计数的场景中,常见的方法有:方法是使用带有 DISTINCT 子句的子查询。然而,这种技术有时效率很低。在这里,我们探索一种潜在的优化方法。
提供的查询旨在从“DocumentOutputItems”表中计算不同的“DocumentId”和“DocumentSessionId”组合:
SELECT COUNT(*) FROM (SELECT DISTINCT DocumentId, DocumentSessionId FROM DocumentOutputItems) AS internalQuery
为了提高性能,考虑基于相关列的哈希或串联组合生成持久计算列。创建后,假设有合适的数据库设置,就可以对该列建立索引并具有与之关联的统计信息。
通过利用此持久计算列,对派生字段进行 DISTINCT 计数操作应产生与原始查询等效的结果。这种方法消除了对子查询的需要,并可能提高效率。这是一个示例:
ALTER TABLE DocumentOutputItems ADD DocumentUniqueIndex AS HASHBYTES('MD5', DocumentId + DocumentSessionId) PERSISTED; SELECT COUNT(DISTINCT DocumentUniqueIndex) FROM DocumentOutputItems;
以上是如何有效地计算 SQL 中多个列的不同组合?的详细内容。更多信息请关注PHP中文网其他相关文章!