想象有兩個表,「用戶」和「等級」 SQLite數據庫,一個保存用戶名和他們的數字(和用戶ID)級別,其他持有相同等級號碼和姓名的等級。目標是輸出一個帶有排名和用戶名(以及它們的用戶名)的html表。多個數據庫queryception性能
<?php
$db1 = new PDO('sqlite:database');
$db2 = new SQLite3('database');
$result = $db1->query("SELECT * FROM users ORDER BY rank DESC");
echo '<table><tr><td>rank</td><td>username</td><td>id</td></tr>';
$data = "";
foreach($result as $row){
$data .=
'<tr><td>'.$db2->querySingle("SELECT rankname FROM ranks WHERE ranknumber =".$row['rank']).'</td>'.
'<td>'.$row['name'].'</td>'.
'<td>'.$row['id'].'</td></tr>';
}
echo $data;
echo "</table>";
?>
這段代碼在小範圍內工作得非常好,問題是一旦數據庫被高度填充,它的性能就會受到影響。基本上它是對第一個查詢的每個輸出行向數據庫發出一個新的請求,對吧?我添加了$ data數據,而不是逐一回顯每一行,以防萬一它可能會減少路上某處的請求,但我不確定它是否會帶來任何積極的影響。我與數據庫處理和PHP太缺乏經驗,知道該代碼會是多少應變把服務器和/或網絡上比較簡單地具有側2個查詢側,將我的代碼執行實際上成百上千的數據庫請求,以及如何會影響性能嗎?另外,如果不好,我能做些什麼呢?如果沒有性能問題,是否有任何不同的方式來實現相同的結果?
更重要的是,如果我也來自一個完全不同的非SQLite的(MySQL的)數據庫完全取代了顯示名稱的用戶名? 201查詢顯示100個用戶,這是否意味着大量增加資源使用量?
聽起來像是「加入」的工作。如果您還不熟悉SQL連接,請參閱以下教程:http://www.tutorialspoint.com/sqlite/sqlite_using_joins.htm。就「效率」而言:您通常希望使*少數*查詢成爲可能。因此建議考慮使用連接。 – paulsm4 2014-10-20 02:50:47
@ paulsm4加入了這個伎倆,就像一個魅力一樣,就好像我的所有數據都在一張桌子上一樣,謝謝! – KittenCodings 2014-10-20 07:07:38