我有一个简单的模式,其中用户相互发送消息。
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
例如,如果我创建了一个名为"signature“的额外列,我将在其中按短划线分隔的大小顺序存储发送者和接收者的两个if。例如: 3-7或2356-4566、123-435等,并且仅对该varchar字段进行索引。从理论上讲,查询速度会更快吗?如果我像这样检索它:
SELECT * FROM messages
WHERE signature = '3-7'
ORDER BY created_at
LIMIT 20
发布于 2012-01-23 01:25:28
SELECT * FROM messages
WHERE sender_id IN (3,7)
AND receiver_id IN (3,7)
AND receiver_id <> sender_id
ORDER BY created_at
LIMIT 20
;
IMHO很有可能(略微)更快。
https://stackoverflow.com/questions/8962975
复制相似问题