将最后的“x”结果保存在数据库中

时间:2015-06-16 11:16:27

标签: sql database performance jdbc h2

我想问一下是否有一种快速的方法可以将最后的'x'插入数据库中。

例如,我有一个应用程序,用户可以通过该应用程序搜索项目,我希望保留每个用户所做的最后10次搜索。我不想将他的所有搜索都保留在数据库中,因为这会增加db_size。有没有快速的方法只保留我的数据库中的最新10次搜索,或者我每次都要检查:


A)到目前为止,已在数据库中存储了多少次搜索
B) if(searching = 10)删除最后一行
C)插入新行

我认为这种方式会对性能产生影响,因为它需要对数据库进行3次不同的访问:检查,删除和插入

1 个答案:

答案 0 :(得分:0)

我认为这不是一种简单/快捷的方法。根据您的条件,我创建了以下存储过程。

我考虑过要存储数据的SearchContent

CREATE TABLE SearchContent (
    Id          INT IDENTITY (1, 1),
    UserId      VARCHAR (8),
    SearchedOn  DATETIME,
    Keyword     VARCHAR (40)
)

在传递UserId, Keyword的存储过程中进行计算。程序将是,

CREATE PROCEDURE [dbo].[pub_SaveSearchDetails]
(
    @UserId     VARCHAR (8),
    @Keyword    VARCHAR (40)
)
AS
BEGIN

    SET NOCOUNT ON;

    DECLARE @Count  AS INT = 0;
    -- A) how many searches has been stored on database so far 
    SELECT @Count = COUNT(Keyword) FROM SearchContent WHERE UserId = @UserId

    IF @Count >= 10
    BEGIN
        -- B) if (searches = 10) delete last row 
        DELETE FROM SearchContent WHERE Id IN ( SELECT TOP 1 Id FROM SearchContent WHERE UserId = @UserId ORDER BY SearchedOn ASC)
    END

    -- C) insert new row
    INSERT INTO SearchContent (UserId, SearchedOn, Keyword) 
    VALUES (@UserId, GETDATE(), @Keyword)
END

示例执行:EXEC pub_SaveSearchDetails 'A001', 'angularjs'