我正在尝试提高多租户 SaaS 系统上大型表的性能,以使报告更快。当我在聚集索引上添加一列时,在系统上进行插入操作的时间从 ~30ms 增加到 1500~2500ms!在这种情况下,应用于此表的最佳聚集索引选项和非聚集索引是什么:
- 数据库:SQL Azure
- 我只在这个表上执行 INSERT 和 SELECT,数据从不更新(UPDATE)
- 并发 INSERTS 的高负载(不同的 Worker 和线程消耗队列中的数据)
- 100.000 行/天(增长)
- 实际上 600 万行(增长)
- 每个租户只读取其 ID 的数据
- 1 个租户将拥有 100-3000 个 DeviceId
表结构:
-TenantID (bigint)(我可以使用 smallint,但如果我将来需要使用 Azure 联合,我更改为 bigint )-DeviceID
(int)
- ReadID (bigint) (Identity)
- UIDRead (GUID)
- ReadDate (日期时间)
- SensorState1 (tinyint)
- SensorState2 (tinyint)
- SensorState3 (tinyint)
...
- SensorState10 (tinyint)
常见的 WHERE 用于读取数据:
-WHERE DeviceId = @X and ReadDate between @XDate and @YDate
-WHERE DeviceId IN (X,Y,Z) AND ReadDate between @XDate and @YDate
-WHERE TenantId = @Y and ReadDate在@XDate 和@YDate
之间 -WHERE TenantId = @X AND DeviceID IN (X,Y,Z) AND ReadDate 在@XDate 和@YDate 之间 -WHERE
TenantId = @X AND DeviceID =@Y AND ReadDate 在@XDate 和@YDate 之间