質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
SQL Anywhere

SQL Anywhereは、パッケージソフト組込みやハードウェア組込みなどのパッケージの名称。RDBMSやデータベースの同期ミドルウェアもパッケージになっています。また、メインのRDBMSサーバーを指すこともあります。

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

意見交換

クローズ

6回答

2328閲覧

SELECT~INSERTにORDER BYをつける意味

nijinopapa

総合スコア0

SQL Anywhere

SQL Anywhereは、パッケージソフト組込みやハードウェア組込みなどのパッケージの名称。RDBMSやデータベースの同期ミドルウェアもパッケージになっています。また、メインのRDBMSサーバーを指すこともあります。

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

0グッド

0クリップ

投稿2023/03/31 00:11

0

0

テーマ、知りたいこと

AテーブルからBテーブルにSELECT~INSERTで全データを移す際、SELECT文にORDER BYをつける意味はあるのでしょうか?
メリット・デメリットなどありましたら教えてください。

背景、状況

同僚の以下のSQL文に的確なツッコミを入れることができなかったので・・・
INSERT INTO B
SELECT * FROM A
ORDER BY A.xxx <= 主キー

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

回答6

#1

Zuishin

総合スコア28656

投稿2023/03/31 00:22

なぜ同僚に意図を聞かないんでしょう?
ツッコミを入れるためにここで聞くんですか?
order by を入れることで同僚の意図した効果が得られるかどうかを実際のデータで検証せず、効果が得られたと思い込んで開発を続けると、後々弊害が出ませんか?

データベースによっては order by でエラーになるものもあるようです。
また無視するものもある反面、order by が適用されているとしか思えない時間がかかるものもあるようです。

適用されることにより、自動採番などの効果を期待しているのであれば、検証する必要があるはずです。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#2

yambejp

総合スコア114581

投稿2023/03/31 00:26

auto_incrementしているカラムがあれば、順位をもったデータ投入ができますが
命題のとおりであればテーブルAの全カラムをテーブルBに流し込んでおり
テーブルBでもxxxでソートすればよいので明確なメリットはないですね
あえて言えばinsertに時間がかかる場合はcreated的なカラムで時差を把握できるとか・・・

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#3

sazi

総合スコア25138

投稿2023/03/31 01:26

編集2023/03/31 01:35

AテーブルからBテーブルにSELECT~INSERTで全データを移す際、SELECT文にORDER BYをつける意味はあるのでしょうか?

order by による作用という事なら、Bテーブルのインデックスの状況によります。

Bテーブルにインデックスが有るなら、インデックスの並びに合わせる事で若干処理速度に貢献するかもしれません。
ですが、それが目的なら一旦インデックスを削除して、処理後に再度作成する方が高速です。

Bテーブルにインデックスが無いなら、追加する順序を指定する事で物理的な格納順序となりテーブルを単純に表示する際は、格納順になる場合があります。

通常抽出の際には、order by を指定する事が殆どなので、格納する際にorder byを使用しても、そのコストは無駄になるだけでしょう。

抽出の際にorder by つけなくても格納順に表示されるというのを目的にするなら意味はあるかもしれませんが。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#4

pippi19

総合スコア679

投稿2023/03/31 01:48

全データを移す意図とAとBのスキーム(テーブル構成)が無明瞭ですが、
単純コピーでA,Bスキームも完全一致の場合は、
ORDER BYを使用すると遅くなるだけで特にメリットはありません。

ただし、移すデータがBで特定の順序で表示されることが望ましい場合、
例えば、B上でのクエリ高速化などを目的にインデックスを作成しているのであれば必要です。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#5

Zuishin

総合スコア28656

投稿2023/03/31 02:08

本当にコピーだけが目的なら、明確なデメリットがあるわけでもない既に終わった作業にこんな重箱の隅をつつくようなツッコミを入れようと質問すること自体が時間と手間の無駄という説が私の中であります。

create table は終わっているようですが、テーブル A と B の間には何らかの違いがあると信じたいですね。
そもそもテーブルの名前変更だけで済むという話ではあってほしくありません。

知識を得たいというのであれば、データベースの種類とバージョンとテーブル構成は最低限の材料として必須で、それら抜きにああだこうだ言っても仕方ないと思います。
既に書いたように、データベースの種類によっては order by は単に無視されます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#6

Zuishin

総合スコア28656

投稿2023/04/18 14:02

ツイッターで暴れるくらいなら質問に答えたら?
なぜ同僚に聞かないのか聞いたんだけど?

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

最新の回答から1ヶ月経過したため この意見交換はクローズされました

意見をやりとりしたい話題がある場合は質問してみましょう!

質問する

関連した質問