从理论上讲,这会更快吗?

时间:2012-01-22 17:17:20

标签: mysql

我有一个简单的架构,用户可以互相发送消息。

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”的额外列,例如,我将按照大小以红色分隔的顺序存储发送方和接收方的两个ID。例如:3-7,或2356-4566,123-435等。并且只有索引的varchar字段。查询在理论上会更快吗?如果我这样检索它:

SELECT * FROM messages 
WHERE signature = '3-7' 
ORDER BY created_at
LIMIT 20

1 个答案:

答案 0 :(得分:1)

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
    ;

恕我直言有可能(稍微)更快。