SQLのサブクエリではまっている
SQLが弱点であることに気がついた最近だが、そんなすぐに成長するわけではない。
ということでかなりドツボにハマッている状態になっています。
使用しているのはPostgresを使用しています。
サブクエリを使用してパフォーマンス低下
サブクエリ(副問い合わせ)は重いらしい。
サブクエリにも種類があるみたいですね。相関サブクエリとか。
このあたりからよくわかってはいませんが、サブクエリが便利なのは実感している。
使っちゃうよ。。。
どのあたりで重くなっているかと予想をいろいろ繰り返している。
SQLの書き方で苦戦
たとえば、
Companyテーブル
- id
- name
Bookテーブル
- id
- name
- company_id
正常
SELECT c.id, (SELECT count(b.id) FROM Book b WHERE b.company_id = c.id GROUP BY b.id) AS count FROM Company c WHERE c.id = 10;
エラー
SELECT c.id, b.count FROM Company c INNER JOIN (SELECT count(b.id) FROM Book b WHERE b.company_id = c.id GROUP BY b.id) AS b ON b.company_id = c.id WHERE c.id = 10;
・・・いい例が思いつかないのです。
言いたいことは、WHERE文の「c.id」について。
サブクエリの中で書いているのは同じ。 ただし宣言がされていないとエラーになる。 この辺りでどうかけばいいのかわからず定数を指定してしまったりした。。。。
初心者だとできることでしか書かないから悲劇を招く可能性がとても高い。。。
だがチャレンジはする。。。チャレンジしている間は大丈夫そうなので、迷惑はかけるけど、頑張っている状態。。。
まぁ、なにがこのSQLだとFROM句でサブクエリを書いているため指定ができないのではないかと。
WHEREやSELECTでは書くことができる。
SQLの処理順が影響していると思われる。
SQL処理順
いろいろみている状態。。。
FROM句が一番はじめですね。
この当たりだな。原因は!!
FROM句のあとだから、WHEREやSELECTでは指定ができると!!
SELECTでのサブクエリはORDERで使用できるが、WHEREでは効果を発揮できない。
これは処理順を理解しないとしっかりとした処理をかけないことを認識させられますね。
難しいですね。
理解しながらすこしずつ書いてみます。
(今回のSQLを実行はしていないので、元からエラーがもしれません。すみません。)
達人に学ぶ SQL徹底指南書 (CodeZine BOOKS)
- 作者: ミック
- 出版社/メーカー: 翔泳社
- 発売日: 2008/02/07
- メディア: 単行本(ソフトカバー)
- 購入: 54人 クリック: 1,004回
- この商品を含むブログ (78件) を見る