Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 这个mysql语句效率低吗?_Php_Mysql - Fatal编程技术网

Php 这个mysql语句效率低吗?

Php 这个mysql语句效率低吗?,php,mysql,Php,Mysql,很简单,这样的查询/语句是低效的还是糟糕的 <? $strSql="SELECT * FROM clients, projects WHERE clients.clientID = $intClientId AND projects.clientID=$intClientId LIMIT 1"; $objResult=mysql_query($strSql); if(mysql_num_rows($objResult)

很简单,这样的查询/语句是低效的还是糟糕的

<?

 $strSql="SELECT * FROM clients, projects
           WHERE clients.clientID = $intClientId
           AND projects.clientID=$intClientId LIMIT 1";       

  $objResult=mysql_query($strSql);
  if(mysql_num_rows($objResult)==0) { 
      echo("No data"); }
  while ($arrRow=mysql_fetch_array($objResult))
  {
    ?>
    <h1>Sub Project(s) for: <span><?=$arrRow[clientName]?></span></h1>
    <?
  } ?>

子项目:

通常,除非绝对必要,否则应避免使用
选择*
,只选择所需的字段。这是否有效取决于表的索引方式。在这种情况下,我假设
clientID
clients
表的主键。如果您在
projects
表中的
clientID
上有索引,则此查询应该非常快速。

通常,您应该避免使用
SELECT*
,除非绝对必要,否则只选择所需的字段。这是否有效取决于表的索引方式。在这种情况下,我假设
clientID
clients
表的主键。如果在
projects
表中的
clientID
上有一个索引,那么这个查询应该很快。

我还想添加一个小建议:尽量不要使用php短标签(使用
,我还想添加一个小建议:尽量不要使用php短标签(使用
我更喜欢编写
项目。clientID=clients.clientID
,以便更容易地查看表是如何连接的

我要避免的另一件事(主要是为了清楚起见)是
while
循环。因为您需要一条记录,所以不需要在结果集上循环


最后,使用短标记不是一个好主意。

我更喜欢编写
项目。clientID=clients.clientID
,以便更容易地查看表是如何连接的

我要避免的另一件事(主要是为了清楚起见)是
while
循环。因为您需要一条记录,所以不需要在结果集上循环


最后,使用短标记不是一个好主意。

在编写或开发新功能时,应该始终调试并运行查询的性能配置文件,以确保使用正确的索引。始终对查询使用EXPLAIN(或EXPLAIN EXTENDED,如果您需要详细说明),以确定其性能

EXPLAIN SELECT * FROM clients, projects WHERE clients.clientID = 1 AND projects.clientID = 1

我还注意到,您需要执行while()循环,如果您只获取一行,这是不必要的。

在编写或开发新功能时,应该始终调试并运行查询性能配置文件,以确保您使用了正确的索引。始终使用EXPLAIN(或EXPLAIN EXTENDED,如果您需要详细说明的话)在查询上单击以确定其性能

EXPLAIN SELECT * FROM clients, projects WHERE clients.clientID = 1 AND projects.clientID = 1

我还注意到,您正在执行while()循环,如果您只获取一行,这是不必要的。

这里有几件事是不正确的:

  • 正如Michael Mior所提到的,您应该避免
    SELECT*
    。这可能是一个效率问题。在某些情况下,如果您的应用程序对表中的列进行假设,然后数据库中的表发生更改,这也可能会中断应用程序
  • 您的查询中有一个
    LIMIT 1
    ,但随后您循环返回结果。这没有意义,因为
    LIMIT 1
    意味着您将只获得一行结果,而不管有多少行与您的查询匹配
  • 您没有转义输入。在这种情况下,如果在前面的代码中,您已经验证了这些变量肯定包含整数值,那么这可能没问题。我通常只使用准备好的语句,完全避免这个问题

这里有几件事需要考虑:

  • 正如Michael Mior所提到的,您应该避免
    SELECT*
    。这可能是一个效率问题。在某些情况下,如果您的应用程序对表中的列进行假设,然后数据库中的表发生更改,这也可能会中断应用程序
  • 您的查询中有一个
    LIMIT 1
    ,但随后您循环返回结果。这没有意义,因为
    LIMIT 1
    意味着您将只获得一行结果,而不管有多少行与您的查询匹配
  • 您没有转义输入。在这种情况下,如果在前面的代码中,您已经验证了这些变量肯定包含整数值,那么这可能没问题。我通常只使用准备好的语句,完全避免这个问题

so$strSql=“选择clientID,clientName FROM clients WHERE clients.clientID=$intClientId”—这很有效,而且效率更高:)如果您只需要
clientID
clientName
,那么就可以了。但您似乎也需要项目信息。要扩展Michael Mior的答案,如果您需要的所有列都被索引,则可能会返回结果,而不必实际转到表本身。因此$strSql=“从clients.clientID=$intClientId的客户端中选择clientID、clientName”;-这样做有效,而且效率更高:)如果您只需要
clientID
clientName
,那么是的。但您似乎也需要项目信息。要扩展Michael Mior的答案,如果您需要的所有列都已索引,则可能会返回结果,而无需实际转到表本身。我不同意。短标记将完全支持rted但未默认启用。如果服务器属于您自己,当然您可以使用php.ini执行您想要的操作。但有数百万初学者开发人员拥有共享主机的网站,无法更改任何设置。我不同意。短标记将完全受支持,但默认情况下未启用。如果服务器属于您,当然可以你可以随心所欲地使用php.ini。但是有数百万初学者开发人员在共享主机上拥有网站,并且无法更改任何设置。如果
clientID
上没有
唯一的
/
索引,那么
限制1
将为MySQL节省一些工作。即使没有
唯一的
索引
clientID
上的ndex可能不超过1个客户端具有相同的idSure,但MySQL没有