0

我在以 SQL Server 作为数据库的 IIS 上运行 Laravel 4。我在 Laravel 中使用 eloquent 来查询数据库。使用此方法,除一个之外的所有查询都运行得非常快。未运行的一个查询在 30 秒后超时。当我从 SQL Profiler 获取原始 SQL 并从命令行运行它时,它会在 1 秒内完成。我试图弄清楚为什么从 Web 应用程序运行 SQL 和从命令行(SQL Server Management Studio)运行它之间存在这样的时间差异。我们在运行每个查询之前都清除了缓存,结果是一样的。

我的 Laravel Eloquent 代码(超时):

$checks = SQLServerHostLastCheck::where('organization_id', '=', Session::get('currentIssueTrakOrganizationID'))
  ->where('hostname', '=', $hostname)
  ->orderBy('check_level')
  ->orderBy('instance_name')
  ->orderBy('check_description')
  ->get();

我也尝试过这种方式(超时):

$checks = DB::table('sql_server_host_last_check_all_v')
  ->where('organization_id', '=', Session::get('currentIssueTrakOrganizationID'))
  ->where('hostname', '=', $hostname)
  ->get();

这是来自 SQL Profiler 的原始 SQL(在 1 秒内完成):

select * from [sql_server_host_last_check_all_v] where [organization_id] = 1 and [hostname] = 'PSMWISSUE01' order by [check_level] asc, [instance_name] asc, [check_description] asc;

此查询返回 66 行,共有 15 列。每个字段中只有少量数据。

4

1 回答 1

0

我通过为构建视图的复杂 SQL 查询/连接创建存储过程而不是视图来解决这个问题。现在立即返回结果。

于 2013-09-17T13:58:11.213 回答