gpt4 book ai didi

mysql - 在等于之前不等于的 SQL 性能,反之亦然

转载 作者:行者123 更新时间:2023-11-29 04:24:13 25 4
gpt4 key购买 nike

我是 sql 查询的新手,正在尝试尽可能多地了解它们。这是我现在正在研究的 SQL 查询,并且对此有一些疑问。

SELECT COUNT(id) AS count 
FROM stride
WHERE recipientId = ?
AND recipientView = 0
AND sourceUserId != recipientId
  1. 将等号放在不等号之前或相反是否会产生性能差异?
  2. 我在这里使用了两次 recipientId。是第二次调用变量更好还是我应该两次都填充变量?例如。

SELECT COUNT(id) AS count FROM stride WHERE recipientId = ? AND recipientView = 0 AND sourceUserId != ?

  1. id 是主键。将 COUNT(*) 改为在性能方面有什么不同吗?我觉得 COUNT(id) 会更快,但这只是一种感觉,我没有证据。
  2. 我应该在这里使用 IN 还是任何其他运算符来提高查询速度?
  3. 您会在这里做些什么来加快查询速度吗?

最佳答案

查询优化与查询语法关系不大,而与 RDMS 查询优化器有很大关系。

您建议的所有内容可能没有任何不同,因为优化器会将它们分开并构建它认为最好的查询。具体来说,

  1. 没关系
  2. 没关系
  3. 没有性能影响,但请注意 COUNT(id)<>COUNT(*)如果有NULL id 列中的 s - 对于主键,不会有任何 NULL s.
  4. 我不明白你如何用 IN 构建这个查询但无论如何它不会影响性能
  5. 索引显着影响速度 - 对于此查询,索引在 recipientId 上, recipientViewsourceUserId将产生巨大影响

你应该做的是不要相信我的话。设置每个查询并查看 RDMS 中的执行计划。如果它们在那里相同,则它们是相同的查询。

关于mysql - 在等于之前不等于的 SQL 性能,反之亦然,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15193278/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com