来自Node和SQL Server Management Studio的存储过程执行时间差别很大

我的程序从Node.js(Azure移动服务)运行5.7秒( successcallback开始和发送查询之间的时间)。 用同样的参数从SSMS运行了0.4秒。

我怎样才能debugging这个问题?

我对问题来源的看法是:

  • 糟糕的执行计划

  • Node.js连接设置错误(可能无法更改)

  • Node.js和Azure SQL Server之间的连接速度很慢

  • 驱动程序问题(Azure 在内部使用此testing版的node-sqlserver )

检查在线Azure SQL数据库pipe理工具的查询性能部分查看Node.js正在执行的实际查询的执行计划,您应该能够跟踪它。 这是在Azure门户数据库页面的“pipe理”button中访问的基于Silverlight的pipe理工具中。

一个潜在的罪魁祸首是来自Node的所有string值都是NVARCHAR。 如果您的过程将参数与索引的CHAR,VARCHAR或UNIQUEIDENTIFIER列进行比较,则数据库必须执行隐式强制转换和索引扫描。 任何索引列都需要是一个NVARCHAR(或者NCHAR)才能获得最佳性能,从Node查询。