select * from がダメな理由

概要

select * from ~ のように、アスタリスクで取得項目を絞らないことが性能に悪影響を与えるのはなぜだろうか?

ワーキングメモリを無駄遣いする可能性

不要なカラムを大量に読み込んで処理する場合、その分余計なメモリを使用することになる。
ワーキングメモリが足りなくなった場合、例えば一時表やクイックソートを使う実行計画になる。

一時表であれば、当然一時表を作成し検索するためのIOが発生するのでそこが性能に悪影響を与える可能性は高い。

余分なIOが発生する可能性

本来インデックス領域アクセスだけで解決出来たものが、テーブルアクセスまで発生してしまうと、その無駄な読み込みが性能に悪影響を与えてしまう可能性がある。

最終的な取得項目や結合・検索条件が、インデックス領域のみで解決できるならそうすべきである。
(性能のネックになるのは基本的にIOなので。)

ちら裏

ある程度以上のデータ規模があるなら、やっぱりベタなSQLが書けるORマッパーの方がいいんじゃないかなぁー。

ただ複雑なSQLが必要とされたりする場合は、設計がイケてないか、RDBで保持するのが妥当でないデータな可能性が高いとのアドバイスも頂いた。
それはまったくもってその通りだと思う。