sql - 查询堆栈溢出数据库以获取问题及其答案的最有效方法
问题描述
所以我试图在堆栈溢出数据库中查询一个问题及其答案。到目前为止,我遇到了两种方法来做到这一点:
SELECT questions.Id as [Post Link], questions.title, answers.body, questions.viewcount
FROM Posts answers
INNER JOIN Posts questions ON answers.parentid = questions.id
第二种方法是这样
SELECT * # Replace the actual fields
FROM posts
WHERE (Id = {POST_ID}) OR (ParentId = {POST_ID})
ORDER BY PostTypeId ASC, Score DESC
哪种方法更好,为什么?有没有其他方法可以做到这一点?并且在 sql 中是否有这个父子关系的术语。我可以研究如何设计有效查询的任何主题?
解决方案
如果两个结果对您来说都一样好,那么这一切都归结为性能。
在性能方面,您可以研究几件事,例如索引,以及如何将它们用作 SQL 引擎。
因此,就性能而言,第二个查询可能会更好,因为您可以只查询一个表而不是两个(很明显)。
你也有很大程度上依赖于索引的WHERE
子句(并且在第一个查询中)。ON
由于Id
列经常被索引,第二个查询似乎非常有效。
推荐阅读
- python - 每个元素或整数索引的优点/缺点
- c++ - 如何在 gtk 中编写可选的客户端装饰?
- c# - 如何在 Xamarin 表单中获取三星健康步数
- ms-access - Table validation rule error: Unknown function 'Nz' in validation expression or default value on 'TableName'
- gitlab - How to get graphs to render in Mermaid + Jekyll / GitLab Pages?
- sycl - sycl/dpc++ 访问器与内核函数对象中的 global_ptr
- javascript - 防止内容在 css 位置更改时跳转/闪烁(绝对默认)
- java - 如何使用抽象弹簧服务的多态性?
- javascript - Javascript Brackets IDE 在 JQuery 3.5.1 文件中显示错误
- c# - 从 BotFramework Adapter 在团队中创建消息时出现问题