SQL查询带有一点点复杂的WHERE子句性能问题

时间:2014-05-06 14:07:41

标签: entity-framework tsql database-performance

在这种情况下我遇到了一些性能问题:

非常简化的查询:

SELECT COUNT(*) FROM Items WHERE ConditionA OR ConditionB OR ConditionC OR ...

我只需确定用户在某些复杂条件下可以访问的项目数。

当Items表中有大量记录(100,000+)并说WHERE子句中连接的~10个复杂条件时,我得到的结果大约是2秒。问题是当满足极少数条件时,f.e。当我从10万只获得10件物品时。

如何改善此“获取我的项目”案例的效果?

其他信息:

  • 查询由EF 6.1
  • 生成
  • MS SQL 2012 Express

SQL Execution Plan

1 个答案:

答案 0 :(得分:0)

在架构中添加其他表。不是构建长查询,而是将每个条件的值插入此新表,以及该用户/会话的键。然后,将两个表连接在一起。

这应该会更好,因为它将允许数据库引擎更好地使用Items表上的索引。

此外,这将使您最终为用户预先定义权限集,这样您就不需要在执行检查时立即插入它们。权限集已经在表中,新表也可以编入索引,这将进一步提高性能。