为何这样拆分帖子索引

看discuz和phpwind他们的帖子表设计都存在拆分索引,不是在主表里做索引。

比如对分类,精华,置顶都做了分离,

主表:thread(tid, title, forumId, diggest, sticky)

副表:thread_forum_index,thread_diggest_index, thread_sticky_index

毫无疑问可以减少主表索引的大小,但是复杂度也增多了,这样做会比在主表里做 forumId, diggest, sticky 的索引效率高很多吗?

阅读 2.5k
1 个回答

索引是为了能快速检索, 联合索引和分开建目的都是一样的.
但是联合索引更适合于这张表在查询时条件是这个联合索引字段同时出现的情况, 分开建则更适合于单个索引字段的条件.

selec * from thread where forumid=? and diggest=? and sticky=?

如果这样的查询据多, 建议建立联合索引

select * from thread where forumid=?
select * from thread where diggest=?
select * from thread where sticky=?

这样就适合建立分开每个字段的索引

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进