Headline About TechLog Download Java VBA Link

March 17, 2009.

サブクエリの話


朝の電車でD&D読了。面白かった。山本直樹氏の作品が発禁になったことがあるという話に驚いた。数作品しか読んだ事がないので、こんな所で評価を述べるのはおこがましいが、確かに氏の作品は衝撃的だ。売春、新興宗教など様々な「刺激的な」素材や崩壊する家庭などを描くため、一般向けの作品とは言いがたいのはわかる。しかし氏はそれを単なるエロ漫画として書いていたわけではなく、明らかに芸術的方向性を貫いている。読めばわかるが、とてもリアルな作品ばかりだ。

山本直樹氏の作品を成年指定にするのは理解できる。しかし、発禁は行き過ぎではないか。あの程度の作品を発禁にするのなら、「蛇にピアス」などの過激な文学作品だって発禁にすべきだ(読んでないのでどの程度過激かは知りません。みんなにわかりやすい、そっち系のタイトルとして選んだだけです)。漫画だけ発禁にすると言うのは、そういう規制をかけている連中が「小説を読んでいない」あるいは「小説を読んだだけでは、漫画を読んだときほどリアルに衝撃的シチュエーションを想像する能力が無い」さらには「漫画の性的描写を単純なエロとしてしか理解できず、芸術として捉える柔軟性が欠如している」としか思えない。非常にばかばかしい。

山本直樹氏には非常に災難な事件だったと思うが、「文章を理解する能力の無い人間にも強い衝撃を与えるほど、氏の絵や文章の表現力が凄まじかった」事の証明だろう。いやはや、もっと本を読めよ⇒発禁にかかわった連中。山本直樹氏の作品を発禁にして、村上春樹氏の作品は芸術とあがめるなんて、もはや漫画というメディアの差別としか思えないぞ。

 

 

今日も仕事は暇だった。しょうがないのでシステムを弄ったり、コードを読んだりして改善点を探った。一箇所、検索に20秒近くかかる画面があったため、コードを読んだところ、酷いSQLが書いてあった。あるデータから不要データを除外する条件として、別テーブルのデータを利用しているのだが、結合ではなく、where in内のサブクエリを利用しているのだ。

例を挙げてみよう。例えば、学校の授業料を管理するシステムがあったとする。請求書を出すために住所録TBLから名前と住所を抽出する。しかし、特待生は請求しなくてよいため、特待生TBLに登録されている生徒のデータは不要だ。そんな場合、baristaならこんなSQLを書く。

 

SELECT J.名前, J.住所 FROM 住所録TBL J

LEFT OUTER JOIN 特待生TBL T ON J.生徒CD = T.生徒CD

WHERE T.生徒CD IS NULL

 

ところが、過去の誰かが作ったプログラム中にはこんなSQLが書かれていたのだ。

 

SELECT J.名前, J.住所 FROM 住所録TBL J

WHERE J.生徒CD NOT IN (SELECT T.生徒CD FROM 特待生TBL T)

 

するとどうなるか。仮に生徒が1,000人、特待生が100人いたとする(太っ腹な学校だ)。

前者なら、1,000人のデータに対し100件のデータを照合しながら結合させていけばよいから、1,000件のレコードを1回、100件のレコードを1回、合計1,100件分の検索をすれば良い。

ところが後者の場合、1,000人の各生徒CDが、特待生TBL100件に含まれていないことを毎回チェックすることになる。結果、1,000 + (1,000 x 100) = 101,000件分の検索が必要となる。単純に考えて100倍遅い。

 

さて翌年にM&Aでこの学校の生徒数が倍になった。ついでに特待生も倍取る事にした(太...)。

前者の場合、2,000人のデータに対し200件のデータを照合しながら結合させていけばよいから、2,000件のレコードを1回、200件のレコードを1回、合計2,200件分の検索をすれば良い。検索にはほぼ倍の時間がかかるようになるだろう。

後者の場合は深刻だ。2,000人の各生徒CDが、特待生TBL200件に含まれていないことを毎回チェックすることになる。結果、2,000 + (2,000 x 200) = 404,000件分の検索が必要となる。データが倍になっただけなのに、検索には4倍の時間がかかるようになる。結果、前者に比べ検索にかかる時間は200倍遅くなる。

 

さて翌年に...はおいといて、このように指数関数的にコストが増加するため、データが増えると壊滅的に検索が遅くなる。こんなSQLは書いてはいけないと言うことはわかっていただけただろう。誰だよ、これ作った奴。....しかしおかげで久しぶりに技術系ブログっぽくなったな。

 

 

帰宅後はまたサイト構築。久しぶりに攻殻機動隊をみたりしつつ。「オンバ」や「ベイビールース」に笑ったり。このあたりは「笑い男」を読んだせいで楽しさが増えた。「退屈でインチキな」世の中が嫌になった、などの台詞も楽しい。まぁ、そっちはコーフィールドだけど。


名前: 意見: パス:

※パスにはこの日記のタイトルをコピペして下さい。


March, 2009
SUN MON TUS WED TUR FRI SAT
1234567
891011121314
15161718192021
22232425262728
293031