SQL Server中使用同义词查询是否会调用源表索引?
同义词与索引相关问题解答
1. 通过D2的同义词查询是否会使用D1中T1表的索引?
会的。同义词本质是原表的指向性别名,当你通过D2的同义词T1执行查询时,数据库会直接解析到原表D1.T1,查询优化器会完全考虑原表上的所有索引,逻辑上和直接查询D1.T1是一致的。
2. 为何同义词查询会导致tempdb持续增长,而直接在D1中查询正常使用索引?
虽然同义词本身不影响索引的可用性,但以下情况可能导致执行计划差异,进而引发tempdb增长:
- 权限上下文不同:在D2中执行查询时,你的用户权限、默认数据库配置等上下文环境和D1中不一致,可能导致优化器选择了低效的执行计划(比如全表扫描而非索引查找),产生大量中间数据写入tempdb。
- 统计信息缺失/过时:D2数据库中没有原表T1的统计信息,或者统计信息未及时更新,优化器无法准确评估数据分布,从而做出错误的执行计划选择。
- 跨数据库的隐式转换:如果查询中涉及跨数据库的字段类型不匹配,触发隐式转换,会导致索引无法被利用,进而引发全表扫描,产生大量临时数据。
3. 能否为同义词创建索引?
不能。同义词只是原数据库对象的引用,本身不存储任何数据,也不支持直接创建索引。所有索引必须直接创建在原表D1.T1上,同义词会自动继承原表的索引能力。
内容的提问来源于stack exchange,提问作者Sujeet Chaurasia
相关产品推荐
相关产品推荐

