小编Rem*_*yth的帖子

是否可以从 sql server 日志文件中恢复一天的查询?

昨天我丢失了在我的系统中输入和编辑的所有数据,我的 ISP 向我宣布昨晚的备份已损坏且无法恢复。

有没有办法访问数据库的日志文件,尝试将数据库恢复到当天数据被删除之前的点?我正在使用 SQL Server 2012 标准版。

我试过这个(我在本网站的另一个问题中找到了):

SELECT deqs.last_execution_time AS [Time], dest.TEXT AS [Query]
FROM sys.dm_exec_query_stats AS deqs
CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest
ORDER BY deqs.last_execution_time DESC
Run Code Online (Sandbox Code Playgroud)

但我从今天早上开始才收到查询。

如果有任何帮助,我将不胜感激。

sql-server recovery sql-server-2012 transaction-log

6
推荐指数
1
解决办法
609
查看次数

一个表是否应该有一个聚集索引,即使它没有合适的字段?

如果您的表没有一个或多个用于聚簇索引(稳定、顺序)的良好候选字段,那么在坏字段上设置聚簇索引更好还是让所有表索引都非聚簇更好?什么是经验法则?

更新

根据反馈,这是一个非常具体的示例,可以使问题更加具体。假设我有一个“PlayerStatsView”表,如下所示:

CREATE TABLE [PlayerStatsView](
    [PlayerId] [uniqueidentifier] NOT NULL,
    [TeamId] [uniqueidentifier] NOT NULL,
    [FirstName] [nvarchar](255) NOT NULL,
    [LastName] [nvarchar](255) NOT NULL,
    [Status] [nvarchar](255) NOT NULL,
    [BattingAvg] [int] NOT NULL,
    [RBIs] [int] NOT NULL,
    [HomeRuns] [int] NOT NULL,
    [PercentageOnBase] [int] NOT NULL,
    CONSTRAINT [PK_PlayerStatsView] PRIMARY KEY NONCLUSTERED ([PlayerId] ASC)
)
Run Code Online (Sandbox Code Playgroud)

所以更具体的说...

PlayerId(主键)是一个 GUID,TeamId 也是一个 GUID。FirstName 和 LastName 的组合是唯一的(或只是差不多),但远不及顺序,更不用说它们太大而不能同时包含在单个索引中。(出于本练习的目的,假设玩家姓名偶尔会更改 - 不是经常,而是不时更改。)其余字段将随着每次写入而更新。

我将主要通过 PlayerId 和 TeamId 进行查询,我将在每个上都有一个非聚集索引。

该表目前包含数万条记录,最终将达到数十万条。

回到问题:

如果没有聚集索引,我会更好,还是应该添加聚集索引,即使没有真正适合的字段?

index sql-server clustered-index

6
推荐指数
1
解决办法
1823
查看次数