【发布时间】:2013-04-09 05:22:02
【问题描述】:
来自这个文档http://www.postgresql.org/docs/current/static/explicit-locking.html
我知道 PostgreSQL 提供了多种锁模式来控制对表中数据的并发访问。
我的问题是我有很多会话将访问我的数据库,但我很困惑我应该创建 1 个 40 列的大表还是许多列更少的表(一对一关系)。
因为当我选择数据时,我会选择所有数据 ---> 当我使用 INNER JOIN 从许多表中选择时需要更多时间,但从 1 个大表中选择所需时间更短。所以如果我使用很多表,我的 php 响应会变慢。
但是当我只使用一张表同时许多会话会更新我的表中的数据时,我害怕死锁或延迟,因为命令 UPDATE、DELETE 和 INSERT 在目标表上获取 ROW EXCLUSIVE 锁定模式。一般情况下,任何修改表中数据的命令都会获得这种锁定模式。
谁能建议我应该采用哪种最佳方法?一张大桌还是多桌?
【问题讨论】:
-
如果不知道您在其中存储了什么,就无法回答您对一张大桌子或多张桌子的问题。标准建议是规范化您的架构bkent.net/Doc/simple5.htm
-
我存储了设备信息,例如 id、name、public ip、private ip、gateway、mask、external port、internal port 等。我很困惑我应该把很多东西做成一张大表列或将其拆分为多个表,用于 exp:dev_info、dev_ip、dev_port
-
要解决您的“慢查询”,请阅读此wiki.postgresql.org/wiki/SlowQueryQuestions 并相应更新您的问题。
标签: postgresql locking relational-database