在 Azure SQL 数据库中,当行级别安全性处于活动状态时,相同的查询可在 4 秒内完成;而当行级安全性被禁用时,则可在 1 秒内完成。
当我比较查询的执行计划时,我发现当行级安全性处于活动状态时,优化器无法使用并行性。你可以看到下面的截图。
我的问题是;
1- 当行级安全性处于活动状态时,优化器在技术上是否可以使用并行性?
2- 如果可能的话,即使行级安全性处于活动状态,我应该怎样做才能使优化器使用并行性?
这是此处记录的已知问题。罪魁祸首可能是安全策略所使用的函数的构建方式。为了避免这种情况,请尝试使用简单且确定性的过滤谓词,这些过滤谓词不涉及复杂的计算或与其他表的联接。
解决方法可能是尝试使用 MAXDOP 查询提示 (OPTION(MAXDOP 2)),但文章建议该方法和其他方法不起作用。希望此方法适用于您的情况或 Microsoft 支持尝试过的解决方法之一。