如何将4000万行数据表的最后UserTableID值存入@a变量?
修正与优化方案
1. 修复原代码语法错误
原代码中DECLARE @a Int,末尾的逗号属于语法错误,会导致执行报错,先修正:
DECLARE @a Int; SET @a = (SELECT TOP 1 UserTableID + 1 AS FisNo FROM ET_MalzemeveHareketleri ORDER BY UserTableID DESC); SELECT @a;
2. 针对4000万行大表的性能优化
对于超大规模数据表,TOP 1 + ORDER BY DESC的写法如果没有在UserTableID上建立索引,会触发全表扫描,效率极低。更高效的方案是直接使用MAX()聚合函数,它能利用索引快速定位最大值:
DECLARE @a Int; SET @a = (SELECT ISNULL(MAX(UserTableID), 0) + 1 FROM ET_MalzemeveHareketleri); SELECT @a;
- 加入
ISNULL是为了处理表为空的场景,避免返回NULL值 - 若
UserTableID是自增主键(IDENTITY),默认会自带聚集索引,MAX()的查询速度会非常快
3. 保障性能的关键前提
- 确认
UserTableID字段存在索引:如果不是主键,需手动创建非聚集索引;主键默认的聚集索引可直接支持MAX()的快速查询 - 保持查询逻辑简洁,避免引入不必要的字段或复杂计算
内容的提问来源于stack exchange,提问作者Ali
相关产品推荐
相关产品推荐

