0

データベースとして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 列があります。各フィールドには少量のデータしかありません。

4

1 に答える 1

0

ビューを構築していた複雑なSQLクエリ/結合のビューの代わりにストアドプロシージャを作成することで、これを解決しました。結果がすぐに返されるようになりました。

于 2013-09-17T13:58:11.213 に答える