我在以 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 列。每个字段中只有少量数据。