1
問題:列age
とテーブルpeople
考えるMySQL:列の数値的に2番目に大きな値を取得する最も最適な方法は?ノークエリの制限
(タイプ:INTEGER)、検索して第二位の年齢を返すようにクエリを記述。
私のソリューション:
SELECT MAX(age) FROM people
WHERE age <> (SELECT MAX(age) FROM people);
と
SELECT age FROM people
ORDER BY age DESC LIMIT 1,1;
非常に簡単な問題が、私は、すなわちSQLの負荷を最小限に抑え、クエリより最適である1思っていました。私はSQL設定のアルゴリズムの複雑さに精通していませんが、最初のクエリはO(n^2)
で実行されます。これは、それぞれn-1
とn
の長さの2つのクエリの最大値を見つける必要があるためです。この分析は正しいですか?もしそうなら、私は私の2番目の解決策に行くべきだと私には思われます。考えていただければ幸いです。私はlimit
/offset
考える
「GROUP BY」は最初のクエリで(書かれているように)_not_する必要はありません。 –
'INDEX(age)'がある場合、最初のクエリは非常に最適です。 2番目はパフォーマンスの観点からひどいものです。 3番目はそうそうです。 –
@RickJames。 。 。最初のクエリでは 'GROUP BY 'が必要です。 OPは、第2行の値ではなく、第2の別個の値を必要とするように思われる(これは最大値と同じでもよい)。 –