【问题标题】:Are multiple indexes involving the same column useful or not?涉及同一列的多个索引是否有用?
【发布时间】:2012-02-29 16:17:55
【问题描述】:

我有一个名为 clicks 的表,它记录了网站周围的鼠标点击。架构如下所示:

对这些数据运行 3 个主要查询:

  • "选择 * WHERE pageid = xxxx"
  • "SELECT * WHERE visitorid = xxx AND pageid = xxxx"
  • "SELECT visitorid, MIN(time) AS mintime WHERE pageid = xxxx GROUP BY visitorid"

将来我也可能在查询中使用 maintestid。所以这看起来像:

  • “选择 * WHERE maintestid = xxxx”

所以我为这两个查询以及主键添加了 2 个索引到表中,如下所示:

我有 3 个问题:

  1. 这个主键像这样有用吗?还是应该只将其设为 ID 列?

  2. pageid 索引有用吗?或者如果所有对 pageid 的查询都由 pageid_visid 索引处理,是否会一样快?

  3. 以后想通过 maintestid 进行搜索时,是应该只在 maintestid 列上添加索引,还是其他方式?

【问题讨论】:

    标签: mysql sql indexing


    【解决方案1】:
    1. 主键没有像您拥有的那样有用 - 该索引的其他列将永远不会被使用。只需在id
    2. pageid only 索引有点用处,因为它的条目将适合更少的索引页面,但我会放弃它并让 mysql 使用其他基于 pageid 的索引(进行基准测试以确认)
    3. 是的 - 定义您的索引以匹配您的重要查询

    【讨论】:

      【解决方案2】:

      你为什么要这样做?

      无论如何,如果你想让它们 pageid、pageid_visid 和 maintestid 作为索引,那么一切都很好。但是如果你只有一个 id 作为主要的 id 会更好,因为它更合适。无论如何,您可以使用其他 id 查询它们

      【讨论】:

      • “如果您只有一个 id 作为主要 id 会更好,因为它更合适”——您所说的“更合适”是什么意思?
      猜你喜欢
      • 1970-01-01
      • 2014-03-17
      • 1970-01-01
      • 1970-01-01
      • 2017-11-15
      • 2021-10-30
      • 1970-01-01
      • 2017-06-05
      • 2012-10-07
      相关资源
      最近更新 更多