2017-08-09 41 views
1

一個單頁,我有大約100查詢,如替代或幫助多個SQL查詢的運行速度太慢

$sQuery = "SELECT * 
FROM `users` 
HAVING `team` = $team 
AND `group` = $group AND male = 1 AND `team1` > 0 AND `team2` > 0 AND status LIKE 'movies'"; 
$rResult = $pdo->query($sQuery)->fetchAll(); 
$results = count($rResult); 

運行作爲一個cronjob保存這些查詢的結果,另一個表。

users表有大約2.100.000行。是的,2.1米,但增長緩慢。每個查詢的結果每個都有0到40行,而不是更多。 現在我的問題:我猜有更好的方法來獲得結果並將它們保存到另一個表中,所以你有什麼建議嗎?令人驚訝的是,cronjob加載時間過長,當然,經常凍結。

我以前使用過準備好的語句,但那些語句更慢。至少我有這種感覺。我希望你能幫助我。非常感謝你!

+3

爲什麼地球上你在這個查詢中使用HAVING而不是WHERE? –

+0

不瞭解數據類型,索引等,我們無法回答。即使桌子類型可以有所作爲。 – Difster

+1

那麼你在這張桌子上有什麼索引;以及EXPLAIN顯示的查詢內容是什麼? –

回答

1

不要使用HAVING作爲默認過濾選項,因爲在MySQL手冊上Which SQL statement is faster? (HAVING vs. WHERE...)注意到了13.2.9 SELECT Syntax他們沒有得到優化

HAVING子句幾乎最後,只是在項目被髮送到應用客戶端,沒有優化。 (LIMIT是具有後使用。)

使用WHERE關鍵字,而不是像其他人一樣。並一直使用準備好的語句查詢變量:

$sql = "SELECT 
      your, columns, here 
     FROM 
      users 
     WHERE 
      team = ? AND 
      group = ? AND 
      male = 1 AND 
      team1 > 0 AND 
      team2 > 0 AND 
      status = 'movies'"; 
$stmt = $db->prepare($sql); 
// ...