[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Что быстрее..
web-monster
В таблице в перспективе около 3000 записей.
Нужно вывести список товаров и для пагинации знать их кол-во.

Какой вариант будет быстрее:
1. Два запроса:
Один SELECT COUNT(*) AS count table ... и ещё 4 inner join
Два SELECT * FROM table ... и ещё 4 inner join

2. Добавлять в кэш массив данных после запроса, кол-во получать $sCount = count(массив)



Спустя 1 минута, 30 секунд (6.12.2011 - 09:08) Семён написал(а):
Естественно лучше COUNT

Спустя 13 минут, 48 секунд (6.12.2011 - 09:21) web-monster написал(а):
Сейчас используется конструкция такого вида:
   public function getMenu($type) {
if (false === ($data = $this->Cache_Get("menu"))) {

$data = array();
$result = mysql_query("SELECT * FROM places_category");
while ($row = mysql_fetch_assoc($result)) {
$data[$row["type"]][] = $row;
}

$this->Cache_Set($data, "menu", array("menu"), 3600 * 24 * 3);
}
return $data[$type];
}

Просто стало интересно есть ли смысл использовать такую конструкцию.
В качестве кэша используется Zend_Cache.

Спустя 1 минута, 45 секунд (6.12.2011 - 09:23) Семён написал(а):
А причём здесь постраничная навигация информации и вывод категорий в меню с использованием кеширования?

Спустя 4 минуты, 28 секунд (6.12.2011 - 09:28) web-monster написал(а):
Нет просто такая конструкция используется почти к каждому запросу, то есть вывод постраничной навигаации можно написать так:
    public function getData($iCategory) {

if (false === ($data = $this->Cache_Get("places_{$iCategory}"))) {
$data = array();
$result = mysql_query("SELECT * FROM places WHERE id_category='$iCategory'");
while($row = mysql_fetch_assoc($result)) {
$data[] = $row;
}
$this->Cache_Set($data, "places_{$iCategory}", array("places"), 3600 * 24 * 3);
}

return $data;
}
$aData = $this->getData(4);
$sCount = count($aData);

Спустя 3 минуты, 41 секунда (6.12.2011 - 09:31) Семён написал(а):
В любом случае COUNT будет правильнее.

Спустя 9 часов, 55 минут, 24 секунды (6.12.2011 - 19:27) I++ написал(а):
SELECT * FROM places WHERE id_category='$iCategory'

Если id_category varchar, вместо int или даже tinyint, тоже будет медленнее.

id_category='$iCategory'

`id_category` = $iCategory

SELECT * FROM

SELECT row1, row2, row3 FROM `places`

Спустя 6 часов, 29 минут, 5 секунд (7.12.2011 - 01:56) vital написал(а):
А че, SQL_CALC_ROWS отменили? Нафига каунт?

Спустя 6 минут, 48 секунд (7.12.2011 - 02:03) caballero написал(а):
только count не со звездочкой а по полю с индексом
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.