2011-12-23 15 views
0

次のSQL文の順序は、ほとんどの場合から最も効率的ではないものは何ですか?列内の最初および/または最後のレコードを取得する

注:(すなわち、代わりにLIMIT 1の適切な場所にTOP 1を使用)構文は、言語に依存しないとします。 table_nameが表の名前であり、column_nameが列の名前であり、idが主キーを持つ列の名前であり、表に数万のレコードがあるとします。

  1. SELECT FIRST(column_name) FROM table_name
  2. SELECT column_name FROM table_name LIMIT 1
  3. SELECT column_name FROM table_name WHERE id=1 --assumes the first id is 1
  4. SELECT column_name FROM table_name WHERE id=(SELECT MIN(id) FROM table_name)

  1. SELECT LAST(column_name) FROM table_name
  2. SELECT column_name FROM table_name ORDER BY id DESC LIMIT 1
  3. SELECT column_name FROM table_name WHERE id=(SELECT COUNT(id) FROM table_name) --assumes no values have been skipped
  4. SELECT column_name FROM table_name WHERE id=(SELECT MAX(id) FROM table_name)

私はどのようにベンチマークこれらのステートメントをするか分からないけど、私の推測は、最初のレコードを取得し、3のために2、3、1、4 2 1、最後のレコードを取得するための4。

+2

どのデータベースですか? –

+0

うん。それについて考えなかったMySQLを使用していますが、今までは 'FIRST()'が存在するかどうかは確認していません。しかし、私の好奇心はピークに達していますので、 'FIRST()'や 'LAST()'関数、 'LIMIT'演算子で十分です。 –

+1

@marc_s:SQLiteとPostgreSQLも 'LIMIT'を使用していますが、私はFIRSTやLASTに慣れていません。指定されたデータベースがないと、MySQLまたはSQL ServerがAFAIK SQL Serverに制限されているとは限りませんが、MySQLは合理的な推測になります。 –

答えて

1

私は推測していますが、 FIRSTとLASTはグループ化操作です。クエリエンジンが結果を取得するには、まずデータを収集する必要があります。

他の人は、見つかった最初の行を返すだけです。 'id'にインデックスがある場合は、降順はそれほど高価ではありません。

+0

これは私の方が向いていたものですが、そうするための実装については十分に分かりません。 –

+0

私は先に進み、それは私の質問に答えたのでそれを受け入れたが、思考のための食糧の私の大規模な編集を見て自由に感じる。 –

関連する問題