У меня есть следующий запрос:Сортировать по замедляет запрос
select
`gasr`.`RID`,
`gasr`.`ID`,
`gr`.`RID`,
`gr`.`TID`
...
from
((((((((((((`gasr`
left join `gasro` ON ((`gasr`.`ID` = `gasro`.`ARID`)))
left join `gro` ON ((`gro`.`RID` = `gasr`.`RID`)))
left join `p` ON ((`p`.`ID` = `gasr`.`ID`)))
left join `l` ON ((`l`.`ID` = `p`.`LID`)))
left join `k` ON ((`k`.`ID` = `p`.`KID`)))
left join `s` ON ((`s`.`ID` = `p`.`TID`)))
left join `ad` ON ((`ad`.`ID` = `p`.`DID`)))
left join `ae` ON ((`ae`.`ID` = `p`.`EID`)))
left join `gr` ON ((`gasr`.`RID` = `gr`.`ID`)))
left join `gs` ON ((`gs`.`ID` = `gr`.`SID`)))
left join `ka` ON ((`ka`.`ID` = `gs`.`KID`)))
left join `m` ON ((`m`.`ID` = `ka`.`MID`)))
ORDER BY gs.ID, gr.RID
Который действительно занимает некоторое время (около 5 секунд) при использовании ORDER BY
, как описано. Если я не буду использовать ORDER BY
, это очень быстро (0,08 секунды).
Объясните мне показывает, что будет временная таблица, созданная:
На обоих полях order by
части является нормальным индексом (по возрастанию).
В этом проблема? Как я могу избежать этого?
ТИА Matt
Благодарим вас за ответ. Каково ваше предложение? Вы говорите, просто доставляете все данные и делаете фильтр/порядок позже на PHP? – frgtv10
Как сказано, это зависит от приложения и его потребности; но да, основываясь на информации, которая будет моим выбором. В то же время, я предлагаю вам сохранить какой-либо поднабор-выбор ('WHERE') в запросе, но выполнять статические сравнения перед агрегацией (т.е. вставлять' JOIN' с 'AND' вместо использования 'late «ГДЕ»). Кроме того, в зависимости от области памяти вашего выбора вы можете захотеть получить список по запросу, содержащему только параметры заказа и идентификаторы, заказать его, а затем запросить дополнительные данные. – vollie