小编Kev*_*sko的帖子

随着时间的推移预测查询性能的合理方法

我有一个 SQL Server 2012 数据库,用于保存已处理文件中的数据。我们从一个文件夹中读取数据,用 python 处理它并将结果保存到数据库中。

我们在 ETL 过程中做的第一件事就是检查文件是否已经被处理。我们简单地做一个:

SELECT id FROM table1 WHERE basename = <basename>
Run Code Online (Sandbox Code Playgroud)

如果有结果我们跳过文件,如果没有结果我们处理文件。现在这个查询需要约 250 毫秒,记录约 5 万。我们已经在basename列上有一个非聚集索引。

我们将看到每个月添加大约 100-200k 条记录。我们批量获取文件。所以我们可能会看到 2k 文件,然后 2 小时后又是 2k 文件。有时我们会得到 10k 文件,有时我们可能只会得到 4k 文件。

保持所有其他变量相同,除了向表中插入 15-2000 万条记录并查看会发生什么之外,还有一个经验法则可以预测我们何时可能遇到性能(查询时间超过 1 秒)问题?

表 DDL:

CREATE TABLE [dbo].[raw_records](
[id] [int] IDENTITY(1,1) NOT NULL,
[basename] [varchar](512) NULL,
[filename] [varchar](1024) NULL,
[file_size] [int] NULL,
[machine] [varchar](10) NULL,
[insert_timestamp] [datetime] NULL,
[raw_xml] [xml] NULL,
[process_status] [varchar](2048) NULL,

PRIMARY KEY CLUSTERED 
(
    [id] ASC …
Run Code Online (Sandbox Code Playgroud)

performance sql-server sql-server-2012 nonclustered-index query-performance

8
推荐指数
1
解决办法
950
查看次数