2012-03-03 93 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; 

这是因为它可以继续使用上拉链比赛之后的索引。