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

时间:2019-11-14 04:40:22

标签: sql sql-server stackexchange-api data.stackexchange.com

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

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

2 个答案:

答案 0 :(得分:1)

如果两个结果对您都一样好,那一切都取决于性能。

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

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

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

由于Id列经常被忽略,因此第二个查询似乎非常有效。

答案 1 :(得分:0)

这里没有“最好的”这样的东西。与数据库一样。而且这两个查询完全不同并且返回不同的结果。您无法将它们进行比较。

区别是:

  • 如果至少有一个答案,第一个查询将返回所有带有答案的帖子。如果您还想返回带有答案的帖子,请使用def upload_file_drive(folder_id, access_token, path, name): para = {"name": name, "parents": [folder_id]} headers = {'Authorization': 'Bearer ' + access_token} files = {'data': ('metadata', json.dumps(para), 'application/json; charset=UTF-8'), 'file': open(path, "rb")} response = requests.post("https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart", headers=headers, files=files) success_response = response.json() file_id = success_response['id'] return file_id join。
  • 第二个查询将返回帖子为1行,所有其他帖子返回为其他行。例如,如果帖子有1个答案,那么您将在第一个查询中得到2行,而不是1行。

因此,您的问题没有适当的答案,但我会坚持第一种方法(只需在此处更改JOIN类型)即可。

相关问题