使用MySQL InnoDB聚集索引的组合主键是否合适?

时间:2013-05-06 17:35:54

标签: mysql innodb clustered-index

我正在尝试从多个来源构建一个汇总的新闻/博客/论坛网站。

因为大多数查询可能在write_time列的相同时间段内,所以我正在考虑利用write_time排序的聚簇索引。

但是因为它不是唯一的,我正在考虑使用像<:p>这样的唯一ID制作主键

(written_time, site_id, article_id)

我认为这需要更大的空间,但它比拥有二级指数要好得多。 如果我想利用与写入时间接近的查询结果,这是一个很好的方法来制作这样的集群索引吗?

以下是一些用例场景:

  • 该网站的主页显示最近汇总的文章

    e.g。 SELECT .. FROM written_time >= datetime_1weeksago

  • 用户可以查看特定时间段内每个电路板的文章

    e.g。 SELECT .. FROM written_time >= datetime1 AND written_time < datetime2

  • 用户可以看到包含特定时间块特定关键字的文章(例如201207),用户可以将搜索条件缩小到某些选定的网站,搜索流量不高,要使用全文引擎,频繁搜索结果由关键字* time_chunk缓存。

    e.g。 SELECT .. FROM written_time >= '2012-07-01' AND written_time < '2012-08-01' + keyword search using full-text engine

    e.g。 SELECT .. FROM written_time >= '2012-07-01' AND written_time < '2012-08-01' AND site_id IN (1,3,5,7,9) + keyword search using full-text engine

  • 后台抓取工具以两种方式获取大量文章,并在两个方向上追加:(这就是我想用write_time创建聚簇索引的原因)

    1. 定期抓取并更新最近的文章(使用较新的write_time附加条目)

    2. 抓取并归档旧文章(使用written_time附加条目)

  • 来自多个高度活跃的新闻/博客/论坛的大量文章

1 个答案:

答案 0 :(得分:0)

出于空间和时间原因,最好为InnoDB表使用一个基于AUTO_INCREMENT的主键,因为InnoDB将PRIMARY KEY值存储在所有其他索引中。