|
|
|
| Здравствуйте!
Вот такая возникла ситуация.
В базе данных ~ 4000 записей (и постоянно увеличиваются).
Надо их вывести на сайте по 20 штук на странице, но в СЛУЧАЙНОМ порядке. И так, чтобы одинаковые записи на разных страницах не повторялись.
Подскажите, пожалуйста, как это реализовать таким образом, чтобы уменьшить нагрузку на базу данных?
Я, например, сначала считываю всю базу:
$prosmotr_categories ="SELECT * FROM name ORDER BY RAND()";
$resurs_catU=mysql_query($prosmotr_categories);
$rows=mysql_num_rows($resurs_catU);
Потом прохожу ее циклом FOR и сохраняю в сессию ID полей:
for ($g=0; $g<$rows; $g++)
{
@session_register("session_users");
@$reed_rows=mysql_fetch_array($resurs_catU);
$session_users[]=$reed_rows[0];
}
И затем, зная ID полей и общее количество строк, вывожу их по 20 штук на странице.
Можно ли каким-либо образом это оптимизировать?
Заранее благодарю,
Ярослав. | |
|
|
|
|
|
|
|
для: Jaroslav
(16.12.2007 в 12:01)
| | в принципе, можно добавить столбик с последовательным порядковым номером sn [1 ... число_строк], чтобы исключить чтение первичных ключей.
А при выводе использовать конструкцию WHERE sn IN ('$list') ORDER BY FIND_IN_SET(sn,'$list')
где $list - список номеров, перечисленных через запятую. | |
|
|
|
|
|
|
|
для: Trianon
(16.12.2007 в 12:46)
| | А если какие-то записи удалены? | |
|
|
|
|
|
|
|
для: Jaroslav
(16.12.2007 в 13:37)
| | То назначать последней (по sn) оставшейся записи sn от удаляемой. | |
|
|
|
|
|
|
|
для: Trianon
(16.12.2007 в 13:40)
| | Подскажите, пожалуйста, а это приведет к уменьшению нагрузки на базу данных?
Какие еще есть способы ее оптимизации? | |
|
|
|
|
|
|
|
для: Jaroslav
(17.12.2007 в 08:08)
| | Вы не написали, как выводите записи.
Но полагаю, что если
а) не пытаться всякий раз читать таблицу (целиком между прочим)
и
б) вместо 20 запросов в цикле делать только один,
то нагрузка уменьшится прилично.
Может слегка вырасти сложность процедуры добавления/удаления имен. Это частые процедуры? | |
|
|
|