【发布时间】:2013-03-15 01:55:13
【问题描述】:
我提取了很多信息,结果我的页面在大约 22~24 秒内加载完毕。我可以做些什么来优化我的代码?
这是我的代码:
<?php
$result_rules = $db->query("SELECT source_id, destination_id FROM dbo.rules");
while($row_rules = sqlsrv_fetch_array($result_rules)){
$result_destination = $db->query("SELECT pk_id, project FROM dbo.destination WHERE pk_id=" . $row_rules['destination_id'] . " ORDER by project ASC");
while($row_destination = sqlsrv_fetch_array($result_destination)){
echo "Destination project: ";
echo "<span class='item'>".$row_destination['project']."</span>";
echo "ID: ".$row_rules['destination_id']."<br>";
if ($row_rules['source_id'] == null) {
echo "Source ID for Destination ID".$row_rules['destination_id']." is NULL<br>";
} else {
$result_source = $db->query("SELECT pk_id, project FROM dbo.source WHERE pk_id=" . $row_rules['source_id'] . " ORDER by project ASC");
while($row_source = sqlsrv_fetch_array($result_source)){
echo "Source project: ";
echo $row_source['project'];
echo " ID: ".$row_rules['source_id']."<br>";
}
}
}
}
?>
这是我的表格的样子:
源表:pk_id:int、project:varchar(50)、feature:varchar(50)、milestone:varchar(50)、reviewGroup:varchar(125)、groupId:int
规则表:pk_id:int、source_id:int、destination_id:int、login:varchar(50)、status:varchar(50)、batchId:int、srcPGroupId:int、dstPGroupId:int
目标表:pk_id:int、project:varchar(50)、feature:varchar(50)、里程碑:varchar(50)、QAAssignedTo:varchar(50)、ValidationAssignedTo:varchar(50)、Priority:varchar(50 ), groupId:int
【问题讨论】:
-
你的表是如何被索引的?
-
使用
JOIN组合您的两个查询。 -
您需要向我们展示表和索引定义。 诊断慢查询需要完整的表和索引定义,而不仅仅是描述或解释。也许您的表格定义不佳。也许索引没有正确创建。也许您认为您在该列上没有索引。没有看到表和索引定义,我们无法判断。如果您知道如何处理
EXPLAIN或获取执行计划,请将结果也放入问题中。 -
您应该考虑使用 SQL 连接。您对数据库进行了太多调用。如果您有 5 个源和 7 个目标,那么您将对数据库进行 35 次 SELECT 查询。如果您使用的是 JOIN,那么您将进行一次 SELECT 查询。
标签: php sql optimization