2013-09-16 42 views
0

我在IIS上運行Laravel 4,並使用SQL Server作爲數據庫。我在Laravel使用雄辯來查詢數據庫。除此之外的所有查詢都使用此方法非常快速地運行。一個未運行的查詢在30秒後超時。當我從SQL Profiler獲取原始SQL並從命令行運行它時,它在1秒內完成。我試圖找出爲什麼從Web應用程序運行SQL並從命令行(SQL Server Management Studio)運行SQL之間存在這樣的時間差異。在運行每個查詢之前,我們清除了緩存,結果相同。SQL Server選擇在1秒內從命令行運行,但在30秒內從網站超時運行

我Laravel雄辯代碼(超時):

$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列。每個字段中只有少量數據。

+0

你的結果可能被緩存了,所以當你第二次運行它時,它會很快出現。嘗試不同的值,看看是否需要更長的時間。 – cmorrissey

+0

@Christopher Morrissey即使當我更改值時,命令行查詢在1秒內​​完成。我們還清除了正在運行的查詢之間的緩存,結果相同。 – thestepafter

+0

爲什麼你拉回所有列?你的表中是否有任何大數據(如varchar(max)或varbinary)?可能需要一段時間才能發送大量數據,例如網絡連接 – Sparky

回答

0

我解決了這個問題,通過創建一個存儲過程而不是一個視圖來建立視圖的複雜SQL查詢/連接。結果現在立即返回。

相關問題