2013-02-19 32 views
0

什麼會工作得更快:迴路數據VS MySQL的WHERE

  • 運行一個查詢:
    JOIN 2個表(18000行,15500行),並與多個WHERE過濾數據(9-12哪來)這樣我只得到15行結果。

    我需要使用不同的WHERE過濾器運行此查詢4次,並且每次將結果項添加到不同的數組(4個數組)。

OR

  • 一次運行一個查詢:
    JOIN 2個表(18000行,15500行),可以將數據傳回,並遍歷結果,在循環中,我將if語句有4 (它將基本上替換WHERE過濾器)並將匹配項添加到數組中。

+1

我認爲這將是更好,如果你所做的陳述直接到MySQL的發動機比返回這麼多行來過濾自己。 – 2013-02-19 16:17:35

+1

這取決於你的表結構,你做什麼類型的處理。試試這兩個選項,看看哪一個更快。 – Tchoupi 2013-02-19 16:18:42

+0

如果where子句使用相同的字段但使用不同的值,則應使用參數化查詢,因爲這將允許SQL引擎緩存查詢,從而提供最佳性能。 – SDC 2013-02-19 16:21:26

回答

0

如何做case聲明:

select (case when <where1> then 1 else 0 end) as Where1, 
     (case when <where2> then 1 else 0 end) as Where2, 
. . . 

然後你可以帶回一個短小組行,並確定它們在應用程序中去。

您的問題很難回答,因爲它取決於處理查詢,返回結果以及遍歷應用程序中的結果集所花費的時間。一般來說,我認爲返回數以萬計的行將是一件壞事(性能方面),相比之下,只返回少數行。但是,在某些環境中,這可能是更好的方法。

如果所有where子句返回相交的行集,那麼你可以把它們放在一個單一的派生列:

select (case when <where1> then 'where1' 
      when <where2> then 'where2' 
      . . . 
     end) as which