2012-02-29 23 views
2

我有一个名为clicks的表,它记录了网站周围的鼠标点击。该模式是这样的:涉及同一列的多个索引是否有用?

enter image description here

有此数据运行的3个主要的疑问:

  • “SELECT *中,pageid = XXXX”
  • “SELECT * WHERE visitorid = xxx和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列上添加一个索引还是其他的东西?

回答

4
  1. 主键是有用就像你拥有了它 - 该索引的其他列将永远不会被使用。只是使它在id只有
  2. pageid只指数是略微有用的,它的条目将适合于较小的索引页,但我会放弃它,让MySQL的使用其他基于的pageid指数(做一个标杆测试确认)
  3. 是 - 定义索引来匹配您的重要问题
0

为什么要这么做?

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

+0

“这将是更好,如果你只有一个ID为主要因为它是比较合适的” - 你所说的“多指什么适当”? – onedaywhen 2012-02-29 10:05:07

相关问题