跟踪表行查询而非“计数”行的替代方法

时间:2011-06-14 23:09:35

标签: mysql sql database database-design

我需要跟踪查询表中每一行的次数。我需要在很多桌子上这样做。

一个想法是“search_count”列

id  | other data ...  | search_count
 1  |      ...        |       12
 2  |      ...        |       90

有没有一种比“搜索计数”列更有效的方法呢?我知道这会起作用,但它给我一个糟糕的“代码味道”,因为我必须在每次查询后做一次更新(或者一个触发器?)。我们会尽可能多地使用Piwik或Google Analytics,但它们并不完全准确,因为我们不仅仅是连接数据库的Web服务器。

该数据库是MySQL 5.x

由于

1 个答案:

答案 0 :(得分:1)

动态地在DB中执行此操作会产生太多死行......

使用您最喜爱的语言memcache->increment跟踪此事。它是原子的。并使用cron每天或每小时存储结果。

要计算的伪代码:

$ns = $memcache->get('count_ns');
$memcache->increment("count-$ns-$table-$id");

关于cron:

$ns = $memcache->get('count_ns');
sleep(1); // allow processes to finish
$memcache->increment('count_ns');
while ($row = $rows->next()) {
  if ($count = $memcache->get("count-$ns-$table-$id") {
    // increment count
  }
}