我正在尝试从多个来源构建一个汇总的新闻/博客/论坛网站。
因为大多数查询可能在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创建聚簇索引的原因)
定期抓取并更新最近的文章(使用较新的write_time附加条目)
抓取并归档旧文章(使用written_time附加条目)
来自多个高度活跃的新闻/博客/论坛的大量文章
答案 0 :(得分:0)
出于空间和时间原因,最好为InnoDB表使用一个基于AUTO_INCREMENT
的主键,因为InnoDB将PRIMARY KEY值存储在所有其他索引中。