【问题标题】:is it good to use combined primary key for MySQL InnoDB clustered index?对 MySQL InnoDB 聚集索引使用组合主键好吗?
【发布时间】:2013-04-30 12:31:59
【问题描述】:

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

因为对于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 的条目)

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

【问题讨论】:

    标签: mysql innodb clustered-index


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2015-05-13
      • 1970-01-01
      • 2012-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-07
      • 2015-05-12
      • 2012-12-30
      相关资源
      最近更新 更多