2009-07-24 65 views
1

在具有不同條件的一個表上執行多個SQL查找或從數組中的表中獲取所有項並將它們以這種方式分離出來會更快嗎?我意識到我沒有解釋我的問題,所以這裏是一個例子:多個SQL搜索與通過一個返回數組進行搜索

我想拉動職位的記錄,並根據他們的發佈時間,一年內,一個月內,一週等。類別的性質導致較低級別的類別完全包含在較高級別類別中。

我應該做不同條件下的SQL得出各個類別,導致多次調用數據庫,或者我應該做一個搜索,返回的所有項目,然後將其從陣列中理清?感謝您的回覆,抱歉,我是新手。

回答

2

通常我會說讓你的數據庫引擎執行排序工作,以獲得更好的性能。每個數據庫引擎都具有此功能,通常它可以做得比您更快。

所以我會投票使用數據庫來獲取你的多個組,而不是試圖在內存中自己做。

0

我通常執行一個大的SQL查詢,然後打破陣列起來紅寶石以最小化數據庫連接的數量或持續時間。

這不一定得更快,而且我從來沒有基準,但少讀的分貝希望意味着它將擴展更長的時間。

0

編輯:沒關係,我不太瞭解這個問題。讓SQL以方便的方式爲您執行排序,然後自己處理數組。

你或許可以使其更容易,如果你讓你的SELECT語句生成的輔助柱說哪個類別(例如,根據日期)記錄屬於。

0

最簡單的,並且最容易理解。將執行多個查詢的每個條件,然後每個這些結果集形成爲一組。我不認爲你想開始遍歷結果集和複製行。

如果你真的想這樣做,在一個查詢,你可以嘗試UNION query

SELECT *, 1 as group from posts WHERE date > '2009-07-24 00:00:00' ORDER BY date DESC 
UNION ALL 
SELECT *, 2 as group from posts WHERE date > '2009-07-17 00:00:00' ORDER BY date DESC 
UNION ALL 
SELECT *, 3 as group from posts WHERE date > '2009-06-24 00:00:00' ORDER BY date DESC 
UNION ALL 
SELECT *, 4 as group from posts WHERE date > '2008-07-24 00:00:00' ORDER BY date DESC 

之後,您只需遍歷一次列表,並通過「group」列篩選到新列表中。

+0

想想吧,聯盟仍然有4個問題,只是變成了一個。我堅持我的原則,你應該保持簡單,只需執行4個查詢。 – sixthgear 2009-07-24 18:55:07

0

這取決於。如果你在你的程序中使用OR操作符,那麼事情會變得緩慢。在這一點上使用多個SQL語句會更好。

但實際上,您需要分析查詢計劃並自行判斷它是否足夠有效。運行真實世界的例子和測試測試測試。