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