查询堆栈溢出数据库以获取问题及其答案的最有效方法

Most efficient way to query stack overflow database for a question and its answers

所以我正在尝试在堆栈溢出数据库中查询问题及其答案。到目前为止,我遇到了两种方法:

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 引擎。

因此,就性能而言,第二个查询可能会更好,因为您可以只查询一个 table 而不是两个(很明显)。

还有 WHERE 子句(以及第一个查询中的 ON),这在很大程度上取决于索引。

由于 Id 列经常被索引,第二个查询似乎非常有效。