2013-03-22 4 views
0

У меня есть приложение, основанное на конкурсе, и включает в себя (скажем) 10 видов печенья (куки) и 6 видов напитков. Я использую MODx Revolution 2.2 в качестве CMS.Статистический сбор из базы данных

Участники в основном определяют, какой вид напитка им бы хотелось, и введите штрих-код (относящийся к типу бисквита).

Я хочу представить это внутри CMS в качестве статистики, но я полагаю, что достаточно много ресурсов для запроса базы данных для каждого COUNT().

$biscuit1 = $modx->query("SELECT COUNT(*) FROM my_table WHERE barcode = '1234'"); 
$biscuit1 = $modx->fetch(PDO::FETCH_ASSOC); 
$biscuit1 = $biscuit1[0]; 

Так что мои вопросы:

  • Делает 16 запросов к базе данных (возможно, больше) плохая практика?
  • Если есть лучший способ сбора статистики по наборам данных, что это такое?

Примечание: Я подумал о создании другой таблицы статистики, где я запускаю эти запросы в задании cron в час. Это поможет?

+0

'COUNT (*)' не все, что ресурсоемким. Также это помогло бы, если бы индекс «штрих-код» был проиндексирован –

+0

Есть ли какие-либо негативные последствия для индексации @HankyPanky ㇱ? – ahren

+0

Да, при индексировании операции 'INSERT' замедляются. Но добавление одного индекса вообще не связано с индексацией. В этом случае негативы настолько ничтожны. Индексирование ускоряет ваш запрос экспоненциально –

ответ

1

COUNT(*) не так много ресурсов. Также это поможет, если был проиндексирован barcode. Кроме того, вы можете получить данные для всех штрих-кодов в одном запросе, вместо того, чтобы выполнить 16 запросов, по одному для каждого

$result = $modx->query("SELECT barcode,COUNT(*) FROM my_table GROUP by barcode"); 
Смежные вопросы