计算特定数据库 table 条目被查询的次数?

Counting the number of times a specific database table entry is queried?

我需要跟踪每个 table 条目被查询的次数 以确定它们的受欢迎程度并最终按该值排序。

如果它能让我更容易地使用 symfony 和 doctrine bundle。

到目前为止,在搜索 table 条目的命中计数时,所有搜索仅涉及 table 中的记录计数。目前还没有找到任何东西。

我还没有尝试过这个,但我正在寻找的是 比更改我的查询操作和调用每个 return 结果的另一个更新查询更有效、更快速和更容易的东西来增加点击数.

我希望每个数据库 table 记录在

之前有被查询的次数

您可以使用 v$sqlstats。 所以如果你查询是

select 10 from dual;

然后计算执行次数,您可以使用下面的查询

select executions 
  from v$sqlstats 
 where lower(sql_text) like 'select 10 from dual';

您必须自己计算访问次数,因为 PostgreSQL 不会跟踪此类信息。

您可以添加一个初始化为 0 的 counter 列并像这样查询:

UPDATE mytab
SET counter = counter + 1
WHERE ...
RETURNING *;

这是一个不会出现竞争条件的原子操作。但是,如果您一次 select 多行,则可能会遇到死锁。

由于频繁更新是 PostgreSQL 的杀手,因此请确保您获得热更新:

  • 创建 table 的 fillfactor 明显低于 100,以便每个块中有空闲 space。

  • 不要在 counter 上放置索引。

只是使用了一个计数器字段并在每次查询时递增。