SuperAPI AI 工具集

design-azure-sql-schema

设计与创作

查看项目

更新于 10-16 00:31

技能介绍

用途:在 Azure SQL Database 上设计表结构,避免 DDL 成功、迁移成功,但数周后在生产环境因某一行、某个执行计划或故障转移而失败,进而需要重建表、重建排序规则或产生重复键。资料基于 2026-08-28 在 EngineEdition 为 5、Edition 为 SQL Azure 的实例上实测。

主要能力与要点:

  1. 索引键预算按字节计算:非聚集索引键 1700 字节、聚集索引 900 字节,复合键累加;NVARCHAR(n) 占 2n 字节,故非聚集键安全上限为 NVARCHAR(850),聚集键为 NVARCHAR(450)。超限仅给消息 1945(严重级 10)警告,首次长值写入才报 Msg 1946。INCLUDE 列不计入预算;外键列长度与排序规则必须与父表完全一致;NVARCHAR(MAX)、json、vector 不能作键列。
  2. 排序规则在 CREATE DATABASE 时确定,默认 SQL_Latin1_General_CP1_CI_AS 不区分大小写,令牌类列会冲突,需按列 ALTER COLUMN 指定 CS 排序规则;事后 ALTER DATABASE COLLATE 不会重排已有数据。
  3. 默认 SQL 排序规则下,驱动以 Unicode 绑定参数会使 VARCHAR 列发生隐式转换,导致索引扫描而非查找;可选 NVARCHAR 或 UTF-8 排序规则的 VARCHAR,二者不可混用。
  4. IDENTITY 在重启或故障转移后出现约千级空洞,trace flag 272 被拒(Msg 40518),可用 ALTER DATABASE SCOPED CONFIGURATION SET IDENTITY_CACHE = OFF;面向人的编号应使用带 START WITH 的 SEQUENCE。
  5. 唯一索引只接受一个 NULL,需用 WHERE code IS NOT NULL 的筛选索引,且会话需 QUOTED_IDENTIFIER ON。
  6. json 与 vector 是存储决策而非键决策,json 不能作过滤条件,应提升为持久化计算列并建索引;vector(1536) 占 6152 字节,表应保持窄。
  7. 跨库外键不支持(Msg 40515),只有一个文件组,分区方案全部映射到 PRIMARY。

使用方式:用 sqlcmd 加 -m-1 执行 DDL 以捕获严重级 10 警告,再运行 schema-audit.sql 审计索引键超限、可空列唯一索引、SQL 排序规则下的 VARCHAR 键列、负起始值序列,并读取数据库排序规则与 IDENTITY_CACHE;最后用 SET STATISTICS IO ON 验证查找仍为索引查找。

限制:资料未提供收费、价格、平台支持范围等信息;部分行为依赖具体引擎版本与 sqlcmd 构建(go-sqlcmd 1.10.0 不打印严重级 10 的消息头)。