我已經拉回了很多信息,因此我的頁面在大約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