【问题标题】:If I have the primary key id do I need an AND clause?如果我有主键 ID,我需要 AND 子句吗?
【发布时间】:2020-04-09 20:36:35
【问题描述】:

我的任务是优化我们的 SQL 调用。 我有疑问:

SELECT * FROM bookmarks WHERE id = ? AND owner_id = ?

id 是 PK

owner_id 是 IndexFK

因为我已经有了身份证。我需要AND owner_id = ? 子句吗?如果我使用它会减慢查询速度吗?

【问题讨论】:

  • 这取决于您的要求需要什么过滤条件。
  • 如果owner_id 的值很重要,那么当您省略它时,您可能不会得到相同的结果,因此您得到错误数据的速度会稍快一些。如果没关系,为了代码的可维护性,你应该删除它。
  • @ÁlvaroGonzález 因为 PK 是唯一的,它应该只返回一条记录。因此,您是正确的,提供 owner_id 应该返回 1 或 0 记录。这是一个非常小的完整性测试。传入的 id 应该归传入的 owner_id 拥有 发布为答案,我会选择你。

标签: mysql sql optimization


【解决方案1】:

可能不会。但它没有任何优势。我希望即使是 MySQL 的优化器也足够聪明,可以在这种情况下使用主键索引。

但是,如果它不小心使用了外键索引,您可能不会注意到性能差异。

它确实为第二次比较增加了非常、非常、非常少的开销。但这可能无法衡量。

【讨论】:

    猜你喜欢
    • 2014-04-05
    • 1970-01-01
    • 1970-01-01
    • 2013-06-22
    • 2022-11-20
    • 2010-12-18
    • 2013-01-28
    • 2012-09-20
    • 2016-01-10
    相关资源
    最近更新 更多