我是sql查询的新手,并尽可能多地学习它们。这是我现在正在调查的SQL查询,并对此有一些疑问。
SELECT COUNT(id) AS count
FROM stride
WHERE recipientId = ?
AND recipientView = 0
AND sourceUserId != recipientId
SELECT COUNT(id) AS count FROM stride WHERE recipientId = ? AND recipientView = 0 AND sourceUserId != ?
id
是主键。将COUNT(*)
替换为性能方面是否有任何不同?我觉得做COUNT(id)
会更快,但这只是一种感觉,我没有证据。IN
或任何其他运算符来获取查询速度吗?答案 0 :(得分:4)
查询优化与查询的语法关系不大,与RDMS查询优化器有很大关系。
你建议的所有内容都可能会使 no 产生差异,因为优化器会将它们分开并构建它感觉最好的查询。具体地,
COUNT(id)<>COUNT(*)
如果id列中有NULL
- 对于主键,则不会有任何NULL
。IN
构建此查询,但无论如何它都不会影响性能recipientId
,recipientView
和sourceUserId
上的索引会产生巨大影响你应该做的不是接受我的话。设置每个查询并查看RDMS中的执行计划。如果它们是相同的,则它们是相同的查询。
答案 1 :(得分:1)
除非存在子查询,否则等于和不等于的位置无关紧要。在你的情况下,where子句将作为一个整体进行评估,因此不等于和等于的位置并不重要。
Count(id)vs Count(*)是相同的,因为[id]是你的主键。无论如何都没有性能优势。