计算特定数据库 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
上放置索引。
只是使用了一个计数器字段并在每次查询时递增。
我需要跟踪每个 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
上放置索引。
只是使用了一个计数器字段并在每次查询时递增。