优化聊天应用数据库
Posted
技术标签:
【中文标题】优化聊天应用数据库【英文标题】:Optimizing chat application database 【发布时间】:2015-07-01 02:09:04 【问题描述】:我正在开发一个带有数据库的简单聊天应用程序。该项目的数据库如图所示。
消息表中的方向列只是为了判断user1是发送者还是user2是发送者。
我使用这个查询来获取消息:
SELECT TextContent,Direction FROM Messages
WHERE User1 = 1 AND User2 = 2
ORDER BY Date
User1 和 User2 的值仅用于说明。
我有两个问题:
我没有为 Messages 表选择主键。我应该简单地选择 ID 列作为主键还是选择多个列作为主键?
我应该在 (User1,User2, 日期)列或(用户1,用户2,ID)列?。我应该创建集群索引还是非集群索引?
【问题讨论】:
How to choose indexes for chat application database的可能重复 @mohan111 这不是重复的。这里的问题更具体。我试图从链接中的问题中得到完整的答案,但我做不到。回答问题的程序员没有回答我的 cmets。 【参考方案1】:是的,您应该在 ID 列上定义一个主键聚集索引。
是的,您应该在 (User1, User2, Date) 上定义一个非聚集复合索引。如果您将 ID 定义为聚集索引,则 ID 已“包含”在非聚集索引中。
【讨论】:
很好的答案,但为什么 ID 应该是主键? 这很复杂,我可以写一本关于这个主题的书。简单地回答您的问题...将主键作为 ID(我假设您也将其设置为身份)将确保您不会意外分配具有相同 ID 的 2 行。将其定义为聚集索引将确保将新行添加到最后一页的末尾,从而防止页面拆分。 (页面拆分是一个很长的话题,大多数人天真地不知道)... 此外,使用单个整数列(4 字节)作为聚集索引而不是多列的组合将使表上的所有非聚集索引更小更紧凑,因为聚集索引的值得到在后台添加到所有非聚集索引行。 感谢您的重播。以上是关于优化聊天应用数据库的主要内容,如果未能解决你的问题,请参考以下文章