0
0
テーマ、知りたいこと
AテーブルからBテーブルにSELECT~INSERTで全データを移す際、SELECT文にORDER BYをつける意味はあるのでしょうか?
メリット・デメリットなどありましたら教えてください。
背景、状況
同僚の以下のSQL文に的確なツッコミを入れることができなかったので・・・
INSERT INTO B
SELECT * FROM A
ORDER BY A.xxx <= 主キー
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答6件
#1
総合スコア28662
投稿2023/03/31 00:22
なぜ同僚に意図を聞かないんでしょう?
ツッコミを入れるためにここで聞くんですか?
order by を入れることで同僚の意図した効果が得られるかどうかを実際のデータで検証せず、効果が得られたと思い込んで開発を続けると、後々弊害が出ませんか?
データベースによっては order by でエラーになるものもあるようです。
また無視するものもある反面、order by が適用されているとしか思えない時間がかかるものもあるようです。
適用されることにより、自動採番などの効果を期待しているのであれば、検証する必要があるはずです。
#3
総合スコア25300
投稿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 つけなくても格納順に表示されるというのを目的にするなら意味はあるかもしれませんが。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
#5
総合スコア28662
投稿2023/03/31 02:08
本当にコピーだけが目的なら、明確なデメリットがあるわけでもない既に終わった作業にこんな重箱の隅をつつくようなツッコミを入れようと質問すること自体が時間と手間の無駄という説が私の中であります。
create table は終わっているようですが、テーブル A と B の間には何らかの違いがあると信じたいですね。
そもそもテーブルの名前変更だけで済むという話ではあってほしくありません。
知識を得たいというのであれば、データベースの種類とバージョンとテーブル構成は最低限の材料として必須で、それら抜きにああだこうだ言っても仕方ないと思います。
既に書いたように、データベースの種類によっては order by は単に無視されます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。