【问题标题】:Speed of query, based on number of conditions?查询速度,基于条件的数量?
【发布时间】:2013-09-12 20:54:21
【问题描述】:

我有一张桌子。 specs[id,name,store_id,section_id,category_id,user_id,model_id]
我的查询很简单:

SELECT * FROM specs
WHERE
    store_id=1
    AND
    section_id=1
    AND
    category_id=1
    AND
    user_id=1
    AND
    model_id=1

我收到的结果是规格列表。
如果我将查询更改为:

SELECT * FROM specs WHERE model_id=1

我会得到相同的结果,因为表格可以有重复项(当然,不包括 id
数据样本(注意:

  id  |  name  |  model_id  |  section_id  |category_id  |  user_id
  ------------------------------------------------------------------
  1   | me     | 22         | 5            |   11        |   777
  2   | you    | 22         | 5            |   11        |   777
  3   | me     | 22         | 5            |   11        |   777
  4   | me     | 22         | 5            |   11        |   777
  5   | you    | 33         | 5            |   11        |   777
  6   | they   | 33         | 5            |   11        |   777
  7   | them   | 33         | 5            |   11        |   777
  8   | we     | 33         | 5            |   11        |   777
  9   | we     | 33         | 5            |   11        |   777
  10  | them   | 44         | 5            |   11        |   776
  11  | they   | 44         | 5            |   11        |   776
  12  | me     | 44         | 5            |   11        |   776
  13  | you    | 44         | 5            |   11        |   776
  14  | they   | 44         | 5            |   11        |   776
  15  | them   | 44         | 5            |   11        |   776

数据库是 MySQL。

问题:由于该表将包含 500k-1000k 条记录,使用第一个查询还是第二个查询会更快吗?更多的条件会让它更快吗?慢一点?

编辑

添加记录时,用户必须为所有列提供值。并且记录总是附加到 model_id。
所以提供什么其他条件并不重要,因为模型是关键。

【问题讨论】:

  • 我不明白这个问题。为什么使用不同的where 子句会得到相同的结果?
  • 怎么会一样呢?结果集在常见情况下会有所不同(如果不是,那么您的所有记录都必须具有等于 1 的所有字段,除了 model_id 字段 - 那为什么要存储它?)。还是我理解错了?
  • 在原帖@AlmaDoMundo 中澄清
  • 澄清....@juergend

标签: mysql sql select optimization multiple-conditions


【解决方案1】:
  1. 两个查询的结果不必相同。结果,条件越多,行数就越少。
  2. 作为一般规则,您不能说更多条件会使其更快。在某些情况下,这是可能的,但不太可能。这完全取决于您在表上定义的索引类型。

这里是one of my older answer on multi-column where clauses and indexes in MySQL

【讨论】:

  • 这也取决于这些条件是否可以预测。例如,使用通配符作为第一个字符添加类似条件几乎肯定会使其变慢。
  • @bpgergo 但是,结果总是一样的。我将尝试更详细地描述数据结构。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-12
  • 1970-01-01
  • 2019-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-04
相关资源
最近更新 更多