2012-03-03 92 views
-1

我有兩個表:ORDER BY在MySQL查詢不工作

  • 導致:拉鍊,avg_price,MAX_PRICE
  • uszipcodes:郵編,城市,州

下面是該查詢

SELECT u.zip, 
     u.city, 
     u.state, 
     l.zip, 
     l.avg_price, 
     l.max_price 
FROM leads AS l, 
     uszipcodes AS u 
WHERE l.zip = u.zip 
ORDER BY l.max_price DESC 
LIMIT 10 

該查詢不使用ORDER BY,只是拒絕使用它。

我已經使用了LEFT JOIN和UNION JOIN和沒有一個似乎工作,要麼

我已經嘗試過了就比MAX_PRICE,有和沒有其他其他變量「L」。並且都沒有工作

我在做什麼錯?

+6

它返回什麼?如果錯誤,'mysql_error()'的輸出是什麼? – 2012-03-03 14:50:10

+2

你會得到什麼錯誤信息? – greut 2012-03-03 14:50:12

+3

順便說一句,請回到您之前的一些問題,並在適當的地方標記答案。如果你這樣做,你會得到更多和更快捷的幫助。 – 2012-03-03 14:50:55

回答

0

當查詢花費很長時間來返回結果時,我假設你的數據庫中有很多數據。

爲了使查詢速度更快,你應該添加索引數據庫的比較字段,並且您希望字段組:

ALTER TABLE leads ADD KEY (zip); 
ALTER TABLE uszipcodes ADD KEY (zip); 
ALTER TABLE leads ADD KEY (max_price); 

如果它仍然緩慢,在查詢前加上EXPLAIN ..EXPLAIN SELECT ...)併發布結果。這是MySQL的強化計劃,告訴我們瓶頸在哪裏。

+0

我必須說,在每一列上添加一個索引也會導致性能下降。只是一個旁註。 – Aidiakapi 2012-03-03 16:25:04

+0

@Aidiakapi誰說的每一個? – Kaii 2012-03-03 19:28:21

+0

誰說我說這個例子是這樣做的?我只是說,向每列添加索引可能會使數據庫容易膨脹。 Mosty Mostacho在大多數場景中展示了一個更好的例子。 – Aidiakapi 2012-03-05 15:06:10

2

這將是更快,如果你只添加一個更廣泛的指標,而不是在引線表兩個窄指標:

ALTER TABLE uszipcodes ADD INDEX (zip) YourZipIndex; 
ALTER TABLE leads ADD INDEX (zip, max_price) YourZipMaxPriceIndex; 

這是因爲它可以繼續使用上拉鍊比賽之後的索引。