【发布时间】:2019-11-01 15:32:45
【问题描述】:
我有一个 JOIN 查询,但我需要优化它以提高性能。
例如,在这个查询中:
"SELECT id FROM users WHERE id = :id"
由于查询末尾没有LIMIT 1,因此选择查询将继续搜索。如果我将LIMIT 1 添加到该查询的末尾,它将只选择一个并停止搜索更多。
这是我的问题和疑问:
"SELECT messages.text, users.name
FROM messages
LEFT JOIN users
ON messages.from_id = users.id
WHERE messages.user_id = :user_id"
在JOIN users ON messages.from_id = users.id 部分,由于只有1 个具有该ID 的用户,它会在找到该查询后继续搜索吗?如果是这样,我该如何优化它以使其仅搜索 1 行?
【问题讨论】:
-
每个用户只有一条消息吗?
-
请在代码问题中给出minimal reproducible example--剪切&粘贴&运行代码;具有期望和实际输出的示例输入(包括逐字错误消息);标签和明确的规范和解释。对于包含 DBMS/产品和 DDL 的 SQL,其中包括约束、索引和基表初始化。对于包含 EXPLAIN 结果的 SQL 性能。 (约束、索引和计划对性能至关重要。)
-
@Don'tPanic 每个用户可以有很多条消息
-
阅读一本关于关系查询实现/优化的教科书。阅读手册重新索引和优化中的所有内容,包括专门的连接优化。您应该在考虑提出问题并将您对这些问题的任何剩余问题相关联之前完成此操作。请参阅 How to Ask、其他 help center 链接和投票箭头鼠标悬停文本。
标签: mysql sql performance join select