涉及同一列的多个索引是否有用?

时间:2012-02-29 07:38:14

标签: mysql sql indexing

我有一个名为点击的表格,用于记录网站周围的鼠标点击次数。架构如下所示:

enter image description here

此数据有3个主要查询:

  • “SELECT * WHERE pageid = xxxx”
  • “SELECT * WHERE visitorid = xxx AND pageid = xxxx”
  • “SELECT visitorid,MIN(time)AS mintime WHERE pageid = xxxx GROUP BY visitorid”

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

  • “SELECT * WHERE maintestid = xxxx”

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

enter image description here

我有3个问题:

  1. 这个主键是否有用?或者我应该只将它作为ID列?

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

  3. 如果我想在将来通过maintestid进行搜索,我应该在maintestid列上添加一个索引,还是其他不同的东西?

2 个答案:

答案 0 :(得分:4)

  1. 主键 NOT 就像你拥有它一样有用 - 该索引的其他列永远不会被使用。只需在id
  2. 上进行操作即可
  3. pageid索引稍微有用,因为它的条目适合较少的索引页面,但是我会删除它并让mysql使用其他基于pageid的索引(做一个基准测试来确认)
  4. 是 - 定义索引以匹配您的重要查询

答案 1 :(得分:0)

你为什么要这样做?

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

查询它们