2012-01-24 56 views
0

首先,這裏的查詢我就說說:預期結果在MySQL中獲取所有或GROUP BY?所有的

SELECT route_id, direction_id 
FROM stop_times 
LEFT JOIN trips USING (trip_id) 
WHERE stop_id= 1002 
GROUP BY CONCAT(route_id, direction_id) 

例子:

route_id | direction_id 
----------------------------- 
106   | 0 
106   | 1 
13   | 0 
13   | 1 
21   | 0 
4   | 0 
4   | 1 
6   | 0 

因此,運行此查詢將採取0.088秒的averge。這沒關係......但是如果我刪除GROUP BY,則需要0.0026秒。

現在我的問題是:

會不會是更好地做GROUP BY和MySQL中處理一切或一切獲取在PHP中的數組處理呢?

感謝

+1

爲什麼你'GROUP BY CONCAT(ROUTE_ID,direction_id )'而不是'GROUP BY route_id,direction_id'?或者簡單地說:'SELECT DISTINCT route_id,direction_id'並刪除'GROUP BY'子句?(當你的預期結果不包含NULL時,我也對'LEFT JOIN'感到困惑,並且我想知道你的連接是否可以更好地轉換爲IN或INISTS下的子查詢;但是如果沒有表格的定義很難說。) – ruakh

+1

@ruakh +1不僅您的修正效率更高,而且會避免產生不正確的結果。想象一下「route_id」和「direction_id」爲'12,1'和'1,21'的行對。使用'CONCAT'時,這些會被錯誤地分組在一起。 –

+0

@ruakh好問題。我沒有答案,但是是的,你是對的......沒有做測試,需要相同的時間。 –

回答

2

您可以替換此:

GROUP BY CONCAT(route_id, direction_id) 

本:

GROUP BY route_id, direction_id 

您將有同樣的結果在更短的時間。

+1

根據數據,您可能不會有相同的結果。看到我對這個問題的評論。 –

2

比如像GROUP BY是什麼數據庫設計。小於百分之一秒的差異不應該是需要關注的任何事情。在實際存在性能問題之前,不需要開始優化。

+0

這種情況下的查詢速度太慢,因爲刪除「GROUP BY」會使其速度提高約30倍。此外,一個幾乎十分之一秒的查詢可能(有希望)是構建頁面時最慢的元素之一。我懷疑指標可以改善。 – Arjan

+0

@Arjan使用此查詢我的頁面從0.0026跳到0.1062,她幾乎在最後。 –

+0

@DavidBélanger這就是我的意思......你的請求不需要花費0.1秒,也可能需要0.05秒。 – Arjan

0

因爲查詢很快,沒有GROUP BY,並且在添加時查詢很慢,在我看來,這些索引不用於分組。實際上,trips中似乎沒有涵蓋route_id, direction_id的索引。 trips中的唯一索引從trip_id開始,不能用於此GROUP BY

我建議在的route_id, direction_id上添加索引。請注意,列應與GROUP BY聲明中使用的順序相同。

+0

我認爲它應該能夠在GROUP BY的旅行中使用主索引。 –

0

您應該在列stop_times.stop_id上添加索引。

你還應該考慮擺脫GROUP BY子句中的CONCAT。我猜你錯了。

我也想知道在這裏使用GROUP BY。如果你使用它來刪除重複,那麼你應該使用DISTINCT。如果您使用它來訂購結果,請使用ORDER BY。

如果您仍然有問題,請提供解釋結果。

0

試試這個:

SELECT concat_route_direction 
FROM 
(SELECT CONCAT(route_id, direction_id) AS concat_route_direction 
FROM stop_times 
LEFT JOIN trips USING (trip_id) 
WHERE stop_id= 1002) AS concat_route_direction 
GROUP_BY concat_route_direction 

我沒有測試它,讓我知道,如果它不工作你有什麼樣的錯誤

+0

0.0806秒。你的查詢不起作用,因爲'GROUP_BY'必須是'GROUP BY'只是一個輸入錯誤,但我使用緩存(在PHP中)解決了這個問題。 –

相關問題