0

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

因为对于written_time 列,大多数查询可能在同一时间段内,所以我正在考虑利用由written_time 排序的聚集索引。

但是因为它不是唯一的,所以我正在考虑使用唯一 id 制作主键,例如:

(written_time, site_id, article_id)

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

以下是一些用例场景:

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

    例如SELECT .. FROM written_time >= datetime_1weeksago

  • 用户可以查看每个版块特定时间段的文章

    例如SELECT .. FROM written_time >= datetime1 AND written_time < datetime2

  • 用户可以看到特定时间段包含特定关键词的文章(如201207),用户可以将搜索条件缩小到一些选定的站点,搜索量不高,打算使用全文引擎,频繁的搜索结果按关键词缓存*time_chunk。

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

    例如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

  • 后台爬虫以两种方式获取大量文章并在两个方向上追加:(这就是为什么我想用written_time做聚集索引的原因)

    1. 定期抓取和更新最近的文章(附加新的written_time的条目)

    2. 潦草和归档旧文章(附加带有written_time的条目)

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

4

1 回答 1

0

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

于 2013-05-06T18:17:27.677 回答