小编Gio*_*iox的帖子

删除 SQL Server 14.0 上的数百万条记录

我有两个表,每个表包含 2 亿条记录。我必须根据列中的整数值从它们中删除大约 7000 万条记录。

我使用以下脚本以 4000 块为单位删除它们:

DECLARE @BATCHSIZE INT, @ITERATION INT, @TOTALROWS INT, @MSG VARCHAR(500)
DECLARE @STARTTIME DATETIME, @ENDTIME DATETIME

SET NOCOUNT ON;
SET DEADLOCK_PRIORITY LOW;
SET @BATCHSIZE = 4000
SET @ITERATION = 0 
SET @TOTALROWS = 0 

WHILE @BATCHSIZE>0
BEGIN   
    SET @STARTTIME = GETDATE();

    BEGIN TRANSACTION
    DELETE TOP(@BATCHSIZE)
    FROM [mydb].[dbo].tableA 
    WHERE [mydb].[dbo].tableA.Code not IN (
            SELECT Code
            FROM [mydb].[dbo].TableB)

    SET @BATCHSIZE=@@ROWCOUNT
    SET @ITERATION=@ITERATION+1
    SET @TOTALROWS=@TOTALROWS+@BATCHSIZE
    COMMIT TRANSACTION;

    SET @ENDTIME = GETDATE();

    SET @MSG = 'Iteration: ' + …
Run Code Online (Sandbox Code Playgroud)

sql-server delete sql-server-2017

7
推荐指数
1
解决办法
797
查看次数

SQL Server 上键/值对表的列存储索引

我需要建立一个数据库来存储评估。

每个评估可以有无限数量的问题和无限数量的回答。

每个评估的响应可以增长到 500k。

每个评估的问题可以是 10 到 200。

虽然评估和评估响应表将使用“正常”关系表设计,但问题和答案应存储为键/值对。

Assessments
|AssessmentID|Name|JsonSchema|

Questions
|QuestionID|AssessmentID|QuestionValue|QuestionType|

AssessmentResponses
|ResponseID|AssessmentID|RespondentName|Date|JsonResponse|

Answers
|ResponseID|QuestionID|AnswerValueText|AnswerValueDecimal|
Run Code Online (Sandbox Code Playgroud)

如您所见,我还以 JSON 格式存储了评估模式和响应,因为我发现在 Web UI 上快速可视化非常有用。特别是 JsonResponse 包含相关响应中给出的所有答案,如下所示:

{
  "interviewDate":"2001/12/28",
  "city":"Mombasa",
  "phone":"123456789",
  "name":"Marco",
  "age":16
}
Run Code Online (Sandbox Code Playgroud)

典型的查询可以是:

  1. 提取特定AssesmentID 的所有答案(分页)。
  2. 计算年龄键的特定 AssessmentID的所有答案的平均值。
  3. 提取键“age”的值大于 25 且键“city”等于“New York”的所有响应

请注意,对于查询 2,年龄值将存储​​在AnswerValueDecimal列中,我将在其中存储所有数值。

我想知道列存储索引是否会提高这种结构的性能

请注意,我知道 ElasticSearch 实例对我有很大帮助,但由于预算问题,我们现阶段无法实施。

关于数据的更多细节

评估中问题的答案通常是从有限数量的选项中选出的。例如:

  • 你结婚了吗?> [是,否]
  • 建筑类型?> [混凝土,骨架,永恒板,铁板,其他]
  • 市区?> [北、南、东、西、中]

最终用户可以根据他们从特定评估中需要的信息来构建查询。举上面的例子,他们想知道城市的北部和西部地区有多少永恒的建筑,到底有多少。

但是比如还有一个问题“你多大了?”,他们想过滤之前的查询,知道北区和西区有多少Eternite建筑,那里有一个年龄低于25岁的人……

使用 JSON 字段存储数据

我尝试使用 SQL Server …

performance sql-server columnstore json

5
推荐指数
1
解决办法
855
查看次数