Я изучаю SQL и просматриваю главы приложения GalaXQL.SELECT .. FROM (SELECT .. FROM ..). Как я могу улучшить этот запрос?
Я написал следующий запрос в ответ на вопрос «Hilight the star (or stars), который имеет планету с самым высоким расстоянием на орбите в галактике. Не забудьте очистить старые hilights до начала».
Этот запрос возвращает результат starid: 23334, который при вставке в таблицу hilight позволяет мне прогрессировать. Тем не менее, программа зависает в течение долгого времени, прежде чем передать этот результат мне, поэтому я подозреваю, что гораздо эффективнее использовать эту информацию из базы данных.
Этот запрос работает, но требуется много времени для обработки, как я могу улучшить этот запрос?
INSERT INTO hilight
SELECT DISTINCT s.starid
FROM planets AS p, stars AS s, moons AS m
WHERE s.starid=(SELECT starid
FROM planets
WHERE orbitdistance=(SELECT MAX(orbitdistance)
FROM planets));
Моя логика этой структуры запроса
Сначала найти планету с орбиты наибольшее расстояние от стола «планет».
Второе для сравнения значения «наивысшего расстояния орбиты» с полем «orbitdistance» таблицы «Планеты» и возврата «звездного», относящегося к этому полю.
Третий сравнить значение поля «starid» в таблице «планет» в поле «starid» в таблице «звезд», а затем вставить, что «starid» к столу «блика».
Структура данных:
Попробуйте изменить 'SELECT DISTINCT s.starid FROM planets AS p, stars AS s, moons AS m WHERE ...' to: 'SELECT s.starid FROM stars AS s WHERE ...' –
Проблема номер 1 заключается в том, что вы используете [древний синтаксис соединения.] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins.aspx), а также почему вы делаете крест? Разве у вас нет условия «ВКЛ» для этих объединений? Если бы вы это сделали, вам, вероятно, тоже не понадобилось бы этого. – Zane
@ypercube: Это приведет к большому количеству копий «звездного», передаваемого «hilight». Поскольку «starid» в таблице «hilight» является уникальным целым числом, это вызывает ошибку «column starid не уникальна» и не позволяет мне прогрессировать. Однако DISTINCT, похоже, проблема, выполняющая запрос без DISTINCT и без попытки вставить данные в таблицу hilight работает успешно и быстро. – Awebb