我正在开发一个社交网络,比如 Facebook 的一个子集。我认为这意味着应用程序的读取量将大于写入量(即 SELECTS 多于 INSERTS、UPDATES 或 DELETES)
我打算使用 MyISAM 将 MySQL 用于数据库。数据库中的每个表都将包含以下三个字段:
CREATED
- 包含记录创建时间的日期字段UPDATED
- 包含记录修改时间的日期字段ROWSTATUS
- 包含单个字符标志的 CHAR(1) 字段,用于显示记录是活动、非活动还是已删除(分别使用值 'A'、I
和D
)。
通过 PHP 包装类,我们确保所有 SELECT 查询都包含 ROWSTATUS,并且 UPDATE 查询也更新 UPDATED 列,INSERT 查询更新 CREATED 列。
我打算不实际删除任何记录,而是选择更新记录 ROWSTATUS 字段D
以显示它已被删除(即软删除)。
我们有一个 SQL 程序,它会在 10 天后物理删除已删除的数据。
但是,我正在阅读这篇文章,该文章认为由于锁定开销,没有必要进行物理删除。相反,作者建议使用这种方案:
SELECT e.eventid,e.title
FROM events e
WHERE NOT EXISTS
(SELECT * FROM event_deletes ed WHERE ed.eventid = e.eventid);
我想知道我的方案与这个提议的机制相比如何,哪个更好?我自己无法得出任何明确的答案。