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

问题描述

所以我试图在堆栈溢出数据库中查询一个问题及其答案。到目前为止,我遇到了两种方法来做到这一点:

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 中是否有这个父子关系的术语。我可以研究如何设计有效查询的任何主题?

标签: sqlsql-serverstackexchange-apidata.stackexchange.com

解决方案


如果两个结果对您来说都一样好,那么这一切都归结为性能。

在性能方面,您可以研究几件事,例如索引,以及如何将它们用作 SQL 引擎。

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

你也有很大程度上依赖于索引的WHERE子句(并且在第一个查询中)。ON

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


推荐阅读