🤨

SELECT * の全取得は本当に遅いのか?

2023/02/20に公開

概要

SELECT *は良くないと常々聞くので、なぜ良くないのか考察していく。

簡易検証してみる

2つのパターンで検証。
カラムが20個あるuserテーブルで行います。

パターンA:全選択

SELECT * FROM user

→5回の平均: 4.1ms

パターンB:カラムのみ選択

SELECT name FROM user

→5回の平均: 3.3ms

厳格な検証方法は他にもたくさんあると思いますが、
少なくとも今回の簡易的な検証でも全検索の方が遅いという結果になりました。

そもそも、なぜ「SELECT *」は良くないのか?

1.ネットワークの問題

DBサーバからクライアントに転送するデータが、不必要に大きくなってしまいます

2.メモリやキャッシュの問題

DSのデータキャッシュ、メモリやディスクが無駄遣いされる可能性が有ります

3.保守性の問題

テーブルにカラムが追加削除された時に、select * だと取得結果の内容が知らないうちに変わってしまいます。
一方、selectでカラムを明示することで、上記のような問題を避けてメンテナンスがしやすくなります。

まとめ

全てのカラムの取得が必要な場面など以外では、select * を用いないのが吉かなと思います。

参照

https://kagamihoge.hatenablog.com/entry/20130913/1379071941

https://vettabase.com/how-slow-is-select/#Why_SELECT_has_a_bad_reputation

https://www.pospome.work/entry/20140721/1405958373

Discussion