Вопрос по скорости вполнения кода

#1 6 ноября 2012 в 13:22
Есть два способа получить количество файлов, через файлы и через SQL.

Первый

$inCore = cmsCore::getInstance();
$inDB = cmsDatabase::getInstance();
$sql = "SELECT count(i.pubdate) as pubdate FROM cms_uc_items i
WHERE i.published = 1 AND i.on_moderate = 0 ";
$result = $inDB->query($sql);
if ($inDB->num_rows($result)){
$one = $inDB->fetch_assoc($result);
echo($one['pubdate']);
}

Второй

if ($handle = opendir(PATH.'/files')) {
while (false !== ($file = readdir($handle))) { $count++; }
closedir($handle);
}
echo($count-2);

Считаем что файлов 30 000.
Вопрос: какой из способов менее ресурсоемкий (тормознутый)?
Если кто-то скажет хоть примерно во сколько раз один способ быстрее другого, будет вообще замечательно.


PS
Я так думаю что первый быстрее, но програмеры мне вставили второй…
#2 6 ноября 2012 в 13:33

Есть два способа получить количество файлов, через файлы и через SQL.

SQL не умеет считать количество файлов, SQL — это язык запросов к базе данных.

ваши варианты мягко говоря не равнозначные

Первый находит количество опубликованных записей в базе данных, не находящихся на модерации. Второй перебирает файлы в директории. В чем связь то? — почему вы вообще думаете, что они вернут одинаковое значение?
#3 6 ноября 2012 в 14:11
Согласен что вернут не одно и тоже, просто вставил код как есть.
Скорей вопрос в том что быстрее, считать файлы или считать итемы из базы? При условии что и тех и тех одинаковое число. Допустим считать 10 файлов, наверно быстрее что считать 10 итемов (учитывая время на коннект к базе, запрос, получение ответа и т.д.), а вот считать 10 000 файлов, уже наверно медленней, чем 10 000 итемов.
#4 6 ноября 2012 в 14:53
зависит от типа таблицы myisam или innodb, зависит от того находится ли таблица уже в памяти, вообщем много факторов, но по свой сути из бд будет быстрее выбрать чем из файловой системы

ну и чем больше файлов будет, тем больше бд будет выигрывать, при таком количестве котором вы указали
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.