查询堆栈溢出数据库以获取问题及其答案的最有效方法
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
列经常被索引,第二个查询似乎非常有效。
所以我正在尝试在堆栈溢出数据库中查询问题及其答案。到目前为止,我遇到了两种方法:
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
列经常被索引,第二个查询似乎非常有效。