Php 一篇文章和评论SQL查询-高效

Php 一篇文章和评论SQL查询-高效,php,sql,Php,Sql,获取文章和评论的最有效和最高效的sql查询是什么 它将是两个表(文章、注释)。最好在一个SQL查询或两个SQL查询中使用它?速度是主要关注点 提前感谢根据您的记录要处理的大小,无论是一次查询还是两次查询,在速度上都不会有太大的显著差异(如果可以忽略不计的话) 就个人而言,如果它可以在一个查询中完成,并且您不必牺牲可读性,我会选择一个查询。作为一个提醒,当需要担心性能时,我会尽量担心性能。根据要处理的记录的大小,无论是一个查询还是两个查询,在速度上都不会有太大的显著差异(如果可以忽略不计的话) 就

获取文章和评论的最有效和最高效的sql查询是什么

它将是两个表(文章、注释)。最好在一个SQL查询或两个SQL查询中使用它?速度是主要关注点


提前感谢

根据您的记录要处理的大小,无论是一次查询还是两次查询,在速度上都不会有太大的显著差异(如果可以忽略不计的话)


就个人而言,如果它可以在一个查询中完成,并且您不必牺牲可读性,我会选择一个查询。作为一个提醒,当需要担心性能时,我会尽量担心性能。

根据要处理的记录的大小,无论是一个查询还是两个查询,在速度上都不会有太大的显著差异(如果可以忽略不计的话)


就个人而言,如果它可以在一个查询中完成,并且您不必牺牲可读性,我会选择一个查询。作为一个头脑清醒的人,我会在担心性能的时候尽量担心性能。

在这里做了很多假设,但是


通常,通过使用一个带有联接的查询,可以获得最佳性能。如果您的数据库和服务器之间的带宽非常有限,并且每次加入都有大量的注释(可能是一种罕见的情况),您可能会看到两个查询的性能优于单个查询解决方案。

在这里做了很多假设,但是


通常,通过使用一个带有联接的查询,可以获得最佳性能。如果您的数据库和服务器之间的带宽非常有限,并且每个连接都有大量的注释(可能是罕见的情况),那么您可能会看到两个查询的性能优于单个查询解决方案。

使用连接来完成这一点,连接比编写两个查询更快。 你可以这样做

SELECT article, comment FROM tbl_article JOIN tbl_comment WHERE tbl_comment.article_id=tbl_article.id

考虑到你在tbl_文章上有主字段id,在tbl_评论上有文章id。如果你将文章id设为外键gr8

使用联接来完成此操作,联接比编写两个查询更快。 你可以这样做

SELECT article, comment FROM tbl_article JOIN tbl_comment WHERE tbl_comment.article_id=tbl_article.id

考虑到你在tbl_文章上有主字段id,在tbl_评论上有文章id。如果生成文章id,则外键将为gr8

,特别是如果您的数据库位于与web应用程序不同的物理服务器上(或执行查询的任何服务器),则两台服务器之间的简单网络延迟可能会成为一个问题(也就是说,从一台服务器到另一台服务器的ping时间可能以毫秒为单位,而查询本身可能以微秒为单位执行。)


我认为最有效的解决方案是将这两个查询放在一个存储过程中并执行它。只需一次数据库往返,不需要连接,并且显示返回给客户端的结果所需的最小数据量。此外,您可以获得查询参数化,存储过程的查询计划将是m或者很可能缓存在服务器中。

特别是如果您的数据库与web应用程序位于不同的物理服务器上(或执行查询的任何服务器),则两台服务器之间的简单网络延迟可能会成为一个问题(也就是说,从一台服务器到另一台服务器的ping时间可能以毫秒为单位,而查询本身可能以微秒为单位执行。)


我认为最有效的解决方案是将这两个查询放在一个存储过程中并执行它。只需一次数据库往返,不需要连接,并且显示返回给客户端的结果所需的最小数据量。此外,您可以获得查询参数化,存储过程的查询计划将是m或者很可能缓存在服务器中。

很难想象一个问题的细节会比您提供的少,但我将尝试用一般术语回答

如果您使用的是现代关系数据库管理系统(MySQL等),您应该期望数据库本身能够最好地理解如何从中获取信息。因此,您应该将几乎所有查询作为单个查询提交给数据库,并让它确定将数据返回给您的最佳计划

如果您指示数据库对用于连接数据的字段进行索引,则数据库的性能最佳;如果您发现性能不佳,大多数数据库引擎都会提供一个选项,让引擎解释用于检索信息的计划,并在此基础上改进索引


对于频繁的请求(如本例),最好将查询封装在数据库中作为视图(存储的查询定义)并查询视图,而不是直接查询表。

很难想象一个问题的细节会比您提供的少,但我将试着笼统地回答

如果您使用的是现代关系数据库管理系统(MySQL等),您应该期望数据库本身能够最好地理解如何从中获取信息。因此,您应该将几乎所有查询作为单个查询提交给数据库,并让它确定将数据返回给您的最佳计划

如果您指示数据库对用于连接数据的字段进行索引,则数据库的性能最佳;如果您发现性能不佳,大多数数据库引擎都会提供一个选项,让引擎解释用于检索信息的计划,并在此基础上改进索引


对于频繁的请求(如此请求),最好将数据库中的查询封装为视图(存储的查询定义)并查询视图,而不是直接查询表。

某些平台允许您通过一次往返数据库来运行多个查询

IE在ADO.Net中,您可以运行:

SELECT col1, col2, whatever from Articles WHERE id=xxx
SELECT colx, coly, colz from comments where arcticle_id=xxx

并获取包含两个数据表的数据集。

某些平台允许您通过一次往返数据库来运行多个查询

IE在ADO.Net中,您可以运行:

SELECT col1, col2, whatever from Articles WHERE id=xxx
SELECT colx, coly, colz from comments where arcticle_id=xxx
并获取包含两个数据表的数据集