Представьте, что есть база данных SQLite с двумя таблицами: «пользователи» и «ранги», одна содержит имена пользователей и их ранг как число (и идентификатор пользователя), другая содержит номера рангов и имя ранга. Целью является вывод таблицы html с именем ранга и именами пользователей (и их идентификатором пользователя).Производительность запроса нескольких баз данных
<?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, чтобы узнать, насколько сильно этот код будет помещен на сервер и/или сеть по сравнению с просто двумя вопросами рядом, будет ли мой код по существу выполнять сотни, если не тысячи запросов к базе данных, и как это повлияет на производительность? Кроме того, если это плохо, что я могу с этим поделать? Есть ли другой способ добиться тех же результатов без проблем с производительностью?
Что еще более важно, что если я также заменю имя пользователя на отображаемое имя из совершенно другой базы данных, отличной от SQLite (MySQL)? 201 запросов для отображения 100 пользователей, означает ли это массовое умножение использования ресурсов?
звучит как задание для «присоединиться». Если вы еще не знакомы с SQL-соединениями, вот хороший учебник: http://www.tutorialspoint.com/sqlite/sqlite_using_joins.htm. Что касается «эффективности»: вы, как правило, хотите сделать так, чтобы было возможно * несколько запросов. Отсюда предлагается рассмотреть возможность использования соединения. – paulsm4
@ paulsm4 join сделал трюк, работает как шарм, как будто все мои данные были в одном столе, спасибо! – KittenCodings