【发布时间】:2012-01-23 01:45:39
【问题描述】:
我有一个简单的模式,用户可以在其中互相发送消息。
id
sender_id
receiver_id
message
created_at
如果我想检索两个用户之间的消息(例如 id:3 和 id:7),我必须使用这样的查询:
SELECT * FROM messages
WHERE (sender_id = 3 AND receiver_id = 7) OR (sender_id = 7 AND receiver_id = 3)
ORDER BY created_at
LIMIT 20
我会有复合索引:sender_id,receiver_id
例如,如果我创建了一个名为“签名”的额外列,我将在其中存储发送者和接收者的两个 ID,按大小顺序用破折号分隔。例如:3-7 或 2356-4566、123-435 等。并且仅索引该 varchar 字段。理论上查询会更快吗?如果我这样检索它:
SELECT * FROM messages
WHERE signature = '3-7'
ORDER BY created_at
LIMIT 20
【问题讨论】:
-
我认为字符串比较会慢得多。
-
丹尼尔怎么说。如果列被正确索引,数据库应该已经优化了操作的废话。
-
书签...很好奇答案:)
-
为什么不直接测试呢?我怀疑如果事物被正确索引,它会更快或更慢,尽管可能会有基于数字和字符串索引的内部优化。
-
你永远不会启用多个用户之间的通信?一个用户向另外两个用户发送消息?从来没有?
标签: mysql