2012-03-03 4 views
-1

У меня есть две таблицы:ORDER BY не работает в MySQL Query

  • ведет: застежка-молния, 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, с и без переменных «л». и никто не работал

Что я делаю неправильно?

+6

Что он возвращает? Если это ошибка, каков вывод 'mysql_error()'? –

+2

Какое сообщение об ошибке вы получаете? – greut

+3

Кстати, пожалуйста, вернитесь к некоторым из ваших более ранних вопросов и пометьте ответы, принятые там, где это необходимо. Если вы это сделаете, вы получите дополнительную и быструю помощь. –

ответ

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

+0

@ Aidiakapi, кто сказал, что каждый? – Kaii

+0

кто сказал, что я сказал, что этот пример это делал? Я просто сказал, что добавление индекса в каждый столбец может легко раздуть вашу базу данных. Мосты Мостачо показывает лучший пример в большинстве сценариев. – Aidiakapi

2

Было бы быстрее, если бы вы только добавить один более широкий индекс вместо двух узких индексов в таблице отведений:

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

Это потому, что он может продолжать использовать индекс после матча на молнии.