Мне интересно, есть ли способ сделать то, что я делаю более эффективно. Прямо сейчас у меня есть класс, который извлекает статусы из базы данных. Это довольно просто и не должно сильно влиять на производительность.Запрос внутри цикла for
public function get ($var1, $var2, $var3)
{
$feed = array(); //Initialize an empty array
//Query the database
$Statement = $this->Database->prepare("SELECT id, name, excerpt, post, timestamp, tags, title FROM posts WHERE col1 = ? AND col2 = ? AND col3 = ? ORDER BY id DESC LIMIT 15");
$Statement->execute(array($var1, $var2, $var3));
while($row = $Statement->fetch(PDO::FETCH_ASSOC))
{
$posts[] = array("id" => $row["id"], /*etc...*/);
}
return $posts;
} //end get
И тогда моя страница настроить что-то вроде этого, которое я знаю, не эффективен на всех:
<?php for ($count = 1; $count <= $total; $count++): //Display the calendar
echo $count;
$feed = $Feed->get($count, $total, $var3);
foreach ($feed as $post):
echo $post["id"];
endforeach;
endfor; ?>
Я надеюсь, что имеет смысл. Там гораздо больше html брошено туда и всего. Сейчас в моей базе данных всего 18 строк, и для загрузки страницы требуется 10 секунд. Что действительно плохо. Я должен настроить его таким образом из-за дизайна сайта. Таким образом, цикл foreach должен находиться внутри цикла for, потому что все это настроено как календарь.
Вопрос в том, будет ли более эффективным выбирать все строки, сохранять их вне цикла for, а затем работать с этим массивом или лучше запускать каждый запрос внутри цикла foreach так, m делать это сейчас (я много читал и знаю, что большинство людей говорят, что это огромный нет нет). И какие проблемы я бы натолкнулся, если бы использовал прежний вариант, и в базе данных было указано около миллиона строк.
Надеюсь, это имеет смысл. Я обновлю вопрос, если это не так. Прямо сейчас, хотя около 30 запросов делаются только для доступа к 1 или 2 строкам. Но единственный вариант, который я мог бы придумать, - это выбрать все строки в таблице, а затем работать с этим массивом, но если вы делаете вид 1 миллион строк в db, я чувствую, что это повлияет на производительность намного больше.
Я прав, и какие решения? Спасибо
Не ответ, но могу ли я просто упомянуть, как приятно (на этот раз) использовать PDO (с подготовленными операторами) вместо 'mysql_ *'. – h2ooooooo
Как правило, лучше ограничить количество запросов на db. Каждое взаимодействие с БД занимает решающие миллисекунды ... но вам также нужно балансировать это с количеством бродячих данных, которые вы будете проходить через ваш сокет, чтобы получить более обобщенный запрос. Также +1 для использования PDO (и +1 к комментарию PDO тоже: P) –
@ Дайте, что бы вы сказали, это ограничение на количество блуждающих данных, которые я бы сохранил в массиве. Потому что я мог выбирать все должности за несколько месяцев, и я думаю, что это то, что я собираюсь делать, но в том, что такое пуайш, этот вариант меня не подводит, а не запрашивает именно то, что мне нужно для каждого дня. Итак, какова точка опроса слишком большого количества запросов или слишком много бродячих данных? и спасибо h2ooooo – Alex