添加DATE列以在上次读取时存储

时间:2014-02-21 10:38:22

标签: sql-server performance frequency

我们想知道某个表中的哪些行经常使用,哪些行从未使用过。我们可以为此添加一个额外的列,但是我们会为每个SELECT获得一个UPDATE,听起来很昂贵? (该表包含80k +行,其中一些经常使用。)

有更好的,也许更快的方法吗?我们正在使用一些旧版本的Microsoft SQL Server。

4 个答案:

答案 0 :(得分:1)

这种日志记录/跟踪是经典的应用程序服务器的任务。如果您想要实现自己的架构(有跟踪架构),请在您自己的层上进行。

在任何情况下,您都需要应用程序服务器。你不会在同一个事务中用select更新跟踪字段,不是吗?回滚怎么样?所以你有一些经理首先运行选择而不是写跟踪信息。将跟踪信息与实体信息一起保存回数据库有什么意义呢?将其保存到应用程序服务器文件中。

答案 1 :(得分:0)

使用另一个表作为键/值对,其中包含两列(例如id_selected,times),用于存储在标准表中选择的记录的ID,并在每次选择记录时将times值递增1。

要执行此操作,您必须从计数表中的选择查询中批量插入/更新所选的ID。例如。作为一个简单的例子:

SELECT id, stuff1, stuff2 FROM myTable WHERE stuff1='somevalue';

INSERT INTO countTable(id_selected, times) 
SELECT id, 1 FROM myTable mt WHERE mt.stuff1='somevalue' # or just build a list of ids as values from your last result
ON DUPLICATE KEY
UPDATE times=times+1

ON DUPLICATE KEY在MySQL中是我的头脑。要在MSSQL中有条件地插入或更新,您需要使用MERGE而不是

答案 2 :(得分:0)

您可以按照建议更新表中的列,但如果是我,我会将事件记录到另一个表,即记录的id,日期时间,用户ID(可能是ip地址等,浏览器版本等) ,几乎我能抓住的任何东西,甚至可能是相关的。 (例如,从现在起6个月后,您的经理不仅决定他/她是否想知道哪些记录使用最多,他/她想知道哪些用户使用的记录最多,或者哪一天的使用模式是等)。

此类信息对于您从未想过的事情非常有用,如果它开始变大,您可以随时汇总并将表格修剪为较小的表格,如果性能成为问题。如果可能的话,我会尽我所能记录。你可能永远不会使用这些信息,但是你永远不会希望你在路上没有它,并且不可能在历史上重新创建。

在确保应用程序不会变慢的过程中,您可能希望从存储过程中“选择”数据,这也会发出logging命令,这样客户端就不会进行两次往返(一次用于选择,一个用于更新/插入)。

或者,如果这是一个Web应用程序,您可以使用异步ajax调用来发出不会减慢用户体验的日志记录操作。

答案 3 :(得分:0)

向跟踪SELECT添加新列不是一种惯例,因为它可能会影响数据库性能,并且数据库性能是根据数据库服务器管理的主要关键问题之一。

所以在这里你可以使用一个名为Auditing的数据库非常好的功能,这非常简单,减轻了对数据库的压力。

查找更多信息:HereFrom Here

或搜索 Database Auditing For Select Statement