0
0
テーマ、知りたいこと
AテーブルからBテーブルにSELECT~INSERTで全データを移す際、SELECT文にORDER BYをつける意味はあるのでしょうか?
メリット・デメリットなどありましたら教えてください。
背景、状況
同僚の以下のSQL文に的確なツッコミを入れることができなかったので・・・
INSERT INTO B
SELECT * FROM A
ORDER BY A.xxx <= 主キー
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
回答6件
#1
総合スコア28656
投稿2023/03/31 00:22
なぜ同僚に意図を聞かないんでしょう?
ツッコミを入れるためにここで聞くんですか?
order by を入れることで同僚の意図した効果が得られるかどうかを実際のデータで検証せず、効果が得られたと思い込んで開発を続けると、後々弊害が出ませんか?
データベースによっては order by でエラーになるものもあるようです。
また無視するものもある反面、order by が適用されているとしか思えない時間がかかるものもあるようです。
適用されることにより、自動採番などの効果を期待しているのであれば、検証する必要があるはずです。
#2
総合スコア113588
投稿2023/03/31 00:26
auto_incrementしているカラムがあれば、順位をもったデータ投入ができますが
命題のとおりであればテーブルAの全カラムをテーブルBに流し込んでおり
テーブルBでもxxxでソートすればよいので明確なメリットはないですね
あえて言えばinsertに時間がかかる場合はcreated的なカラムで時差を把握できるとか・・・
#3
総合スコア24913
投稿2023/03/31 01:26
編集2023/03/31 01:35AテーブルからBテーブルにSELECT~INSERTで全データを移す際、SELECT文にORDER BYをつける意味はあるのでしょうか?
order by による作用という事なら、Bテーブルのインデックスの状況によります。
Bテーブルにインデックスが有るなら、インデックスの並びに合わせる事で若干処理速度に貢献するかもしれません。
ですが、それが目的なら一旦インデックスを削除して、処理後に再度作成する方が高速です。
Bテーブルにインデックスが無いなら、追加する順序を指定する事で物理的な格納順序となりテーブルを単純に表示する際は、格納順になる場合があります。
通常抽出の際には、order by を指定する事が殆どなので、格納する際にorder byを使用しても、そのコストは無駄になるだけでしょう。
抽出の際にorder by つけなくても格納順に表示されるというのを目的にするなら意味はあるかもしれませんが。
#4
総合スコア679
投稿2023/03/31 01:48
全データを移す意図とAとBのスキーム(テーブル構成)が無明瞭ですが、
単純コピーでA,Bスキームも完全一致の場合は、
ORDER BY
を使用すると遅くなるだけで特にメリットはありません。
ただし、移すデータがBで特定の順序で表示されることが望ましい場合、
例えば、B上でのクエリ高速化などを目的にインデックスを作成しているのであれば必要です。
#5
総合スコア28656
投稿2023/03/31 02:08
本当にコピーだけが目的なら、明確なデメリットがあるわけでもない既に終わった作業にこんな重箱の隅をつつくようなツッコミを入れようと質問すること自体が時間と手間の無駄という説が私の中であります。
create table は終わっているようですが、テーブル A と B の間には何らかの違いがあると信じたいですね。
そもそもテーブルの名前変更だけで済むという話ではあってほしくありません。
知識を得たいというのであれば、データベースの種類とバージョンとテーブル構成は最低限の材料として必須で、それら抜きにああだこうだ言っても仕方ないと思います。
既に書いたように、データベースの種類によっては order by は単に無視されます。
#6
総合スコア28656
投稿2023/04/18 14:02
ツイッターで暴れるくらいなら質問に答えたら?
なぜ同僚に聞かないのか聞いたんだけど?
同じタグがついた質問を見る
SQL Anywhereは、パッケージソフト組込みやハードウェア組込みなどのパッケージの名称。RDBMSやデータベースの同期ミドルウェアもパッケージになっています。また、メインのRDBMSサーバーを指すこともあります。
Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。