【问题标题】:mysql search and index performancemysql搜索和索引性能
【发布时间】:2011-06-29 05:29:39
【问题描述】:

假设您有一个用户可以订阅 cmets 的博客文章 在专用于管理订阅的表上搜索速度更快,例如: ID、帖子、用户

或者在用户表中有一个字段及其订阅是否更快: 订阅=|2|4|18|21|33|

或者在帖子表中包含订阅该帖子的用户的字段是否更快: 用户订阅=|1|2|4|6|9|

【问题讨论】:

  • 第二个建议是多值字段吗?
  • @Mike 就是这个样子
  • @Mike 是的,由 |或,(逗号)

标签: mysql performance search indexing normalization


【解决方案1】:

最好有一个单独的表Subscriptions,与IDPostUser

(假设ID该表的自动增量PK,将FK发布到表PostsUser将FK发布到表Users

从逻辑的角度来看(订阅是它自己的实体,因此它自己的表)至于数据库性能,单独的表是要走的路。

这是一个名为normalization 的过程,它允许您进行连接并执行复杂的查询,例如“给我最近订阅此帖子的 5 个用户”或“获取该用户自上次访问后发生变化的所有帖子"。

它还不限制您的最大订阅数(其中用户表中的固定字段始终具有长度)。

它将允许您以后轻松扩展您的模型。例如,不同类型的订阅:通过 RSS、邮件、喜欢的帖子获得通知...

最后但同样重要的是,由于您使用的是关系数据库 MySQL,因此这种工作方式(关系,明白吗?)在 MySQL 中要快得多。它允许索引(快速搜索)、外键(用户不能订阅不存在的帖子,如果帖子被删除,所有订阅都会得到自动删除)等等。

【讨论】:

  • 你应该阅读规范化,这里有太多的好处要解释。我将列出一些作为示例,但列表并不详尽:)
  • 如果您使用面向文档的 DB NoSQL,例如 MongoDB 或 CouchDB?
  • 您可以在那里“嵌入”表格。但明智的做法是在决定使用哪个系统之前先了解一下关系系统与非关系系统 - 事后改变比一开始就做出正确决定更难。
【解决方案2】:

如果索引正确,搜索实际表字段会更快。

事实上,即使它们没有被索引,它也应该更快!

【讨论】:

    猜你喜欢
    • 2019-07-31
    • 1970-01-01
    • 2012-07-03
    • 1970-01-01
    • 2010-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多