我已经拉回了很多信息,因此我的页面在大约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,项目:VARCHAR(50),特点:VARCHAR(50),里程碑: 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,项目:varchar(50),功能:varchar(50),里程碑:varchar(50),QAAssignedTo:varchar(50),ValidationAssignedTo:varchar(50),优先级:varchar(50), groupId:int
如何你的表索引? – 2013-03-14 17:29:54
使用“JOIN”组合您的两个查询。 – Kermit 2013-03-14 17:34:25
**您需要向我们展示表和索引定义。**诊断慢查询需要全表和索引定义,而不仅仅是描述或释义。也许你的表格定义不好。也许索引没有正确创建。也许你没有一个你认为你做过的那个专栏的索引。没有看到表和索引定义,我们不能说。如果你知道如何做一个'EXPLAIN'或者得到一个执行计划,那就把结果也放在问题中。 – 2013-03-14 17:34:54