データベースとしてSQL Serverを使用して、IISでLaravel 4を実行しています。Laravelで雄弁を使用してデータベースにクエリを実行しています。この方法を使用すると、1 つを除くすべてのクエリが非常に高速に実行されます。実行されていない 1 つのクエリは、30 秒後にタイムアウトになります。SQL プロファイラーから生の SQL を取得してコマンド ラインから実行すると、1 秒で完了します。Web アプリケーションからの SQL の実行と、コマンド ライン (SQL Server Management Studio) からの SQL の実行の間になぜこのような時間差があるのかを理解しようとしています。各クエリを実行する前にキャッシュをクリアしましたが、結果は同じです。
私の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 プロファイラーからの生の 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 列があります。各フィールドには少量のデータしかありません。