2016-04-20 3 views
4

У меня есть стол с ок. 70000 записей. Он содержит информацию о брендах, моделях и категориях товаров. Пользователь может запросить их, используя любую их комбинацию, и отображаемый счетчик товаров, соответствующих критериям, должен быть обновлен в соответствии с его выбором.COUNT (*) против ручного отслеживания счетчиков?

У меня это было сделано с помощью запроса как

SELECT model,COUNT(*) AS count FROM table$model_where 
      GROUP BY model 
      ORDER BY count DESC 

где $model_where зависит от того, что были другие условия. Но мой босс попросил меня повторить эти запросы в с помощью специального счетчика таблицы, потому что он считает, что они тормозят весь процесс вниз, но эталон я помещал предлагает иначе, пример вывод:

The code took: 0 wallclock secs (0.02 usr + 0.00 sys = 0.02 CPU)

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

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

+0

Будет ли ваша таблица будет в 10 раз больше в будущем? 1000x? Это повлияет на время, которое вы измеряете? – nos

+0

Вряд ли. Он уже заполнен производственными данными. Он может расти в будущем, но не так много. – ZzZombo

+0

Найдите подходящий мультфильм Дилберта и положите его на стол, когда он не смотрит. –

ответ

2

В зависимости от вашего конкретного случая это может быть или не может быть в случае premature optimization.

Если на следующей неделе у вас будут столы размером 100x, это может быть не так, но в остальном это так.

Кроме того, ваш босс должен принять во внимание, что вам и всем остальным придется проверять, что счетчики обновляются, когдаили DELETE происходит на подсчитанных записях. Существуют фреймворки, которые делают это автоматически (на ум приходит рубины на rails ActiveRecord), но если вы не используете один из них, есть около gazillion способы, которыми вы можете в конечном итоге с неправильными счетчиками в DB

+0

Только хэдз-ап, я реализовал ручное отслеживание счетчиков, потому что тесты показали * незначительное * постоянное увеличение производительности, если оно есть, и я не могу с этим спорить. Кто может? – ZzZombo

Смежные вопросы