2013-06-28 45 views
-2

我嘗試,因爲作祟爲了優化我的查詢,爲更多的理解, 我試圖做到這一點很好的解決方案:Slow query when using ORDER BY這個mysql查詢語法有什麼問題?

我有70K在我的表,當我去爲了這個,我有這個eeror:# 1248 - 每一個派生表必須有它自己的別名

我原來的查詢是這樣的:

SELECT * FROM 
(SELECT * FROM profile 
    LEFT JOIN profileg USING(id) 
    WHERE X NOT IN (SELECT A FROM B) AND (S = 1) 
    DESC LIMIT 0, 20 
) ORDER BY M 

你可以提供一些幫助嗎?!? 問候, 傑西卡

+1

一般提示:如果你說你得到一個錯誤信息,**告訴我們它是什麼**。至於你的查詢,你不需要那些額外的括號。這種類型的包圍僅在連接多個表時在sql server中需要。在MySQL中,它們不是必需的,反正你把它們放在錯誤的位置。 –

+0

'profile'是表格還是列?您可以從中進行選擇,還可以將它用作WHERE和ORDER BY子句中的列。如果你有一個與表名相同的列,你應該改變它,或者至少使用一個表別名,這樣它的可讀性就更高。 –

+0

@ Marc,括號可以解決一些「orderby」pb的某些查詢 – jess

回答

1

您的第二個查詢中的錯誤是您的子查詢無效。這是你以後的事嗎?

SELECT * 
FROM (SELECT * FROM profile 
    LEFT JOIN profileg USING(id) 
    WHERE X NOT IN (SELECT A FROM B) AND S = 1 
    ) as table1 
ORDER BY M DESC 
LIMIT 0, 20 

雖然我沒有看到子查詢的要點。做

SELECT * FROM profile 
LEFT JOIN profileg USING(id) 
WHERE X NOT IN (SELECT A FROM B) AND S = 1 
ORDER BY M DESC 
LIMIT 0, 20 

似乎基本上是一樣的事情,除非你正在執行少一個查詢。

+0

但實際上它不一樣,我有70K的行和oreder由於麻煩,我想(SELECT * FROM profile) LEFT JOIN profileg USING(id) WHERE X NOT IN(SELECT A FROM B)AND S(SELECT A FROM B)AND S = 1 ) ORDER BY M DESC LIMIT 0,20 – jess

+0

它不一樣,我有70K行和順序引起麻煩, – jess

+0

在我的回答中,第一個查詢運行速度比第二個更快?他們都使用ORDER BY,就像你的兩個例子一樣。 –