TOP > SQLの書き方あれこれ

SQLの書き方あれこれ

パフォーマンスをあげるには、気を使わないより、使った方がいいようです。

select *  は使っちゃいやーん!!

*(アスタリスク)ですが、これ肛門に見えるのはボクだけでしょうか?
きっとボクだけじゃないでしょう。

そんな事はどうでもいいのですが、便利な全列取得指定である肛門..失礼、「*」ですが、Oracleは湖に浮かぶ白鳥が水面下では馬車馬の様に足を動かしているのと同様、がんばっているようですよ。

そんなOracleさん、ちょっと聞き耳を立ててみましょうか...


T 「最近の使われ方っていうんでしょうか、また作法って言うんでしょうかね。どうなんでしょうね?」
O 「もうねー、嫌んなっちゃうわ。ずーっと働かされいるけれど、給料をくれたのは最初だけよ。あなた色に染まるわ、私。なーんて言って嫁いできたけど、沢山子供を作られるわ、もう私、いやっ!!」
T 「まーまー、そう言わないでさー。子供って何人いるの?」
O 「今は4人よ。罪無と、犯買と、神痔と、ブツ竜よ。4人も面倒見ている私ってちょっとステキじゃない?」
T [... そうでもないす。」
O 「そしてみんなして、色んな質問をするもんだから、私もう興ざめ。同じ答えを出すのに、質問の仕方が違うのよ! はぁ、もう虫の息よ私。 で、肛門なんかで質問された日には、質問した方は投げっぱなしでタバコでも吸ってりゃいいけど、私は大変よ。肛門って何だー!何を意味するんだー!って、ガーッと調べに行くのよ。あー、もう死にたい..」

(続く...)

肛門についてAmazonちょっと見てみるか

 

と言うわけで、(お客さんに納めるシステムでは)*は使わない様にしましょうねー

where句の順序指定

where句に複数の索引のない列を指定した場合の絞り込み順は [and]と[or]で変わりますYO

AND
後ろから順に絞り込み
or
前から順に絞り込み

索引が利用されない検索

列にたいして計算しちゃだめー!

※給料に索引がついているとして...
select 名前 from 社員 where
給料 - 10000 > 0;

索引の値のまま評価しないと、索引を使用出来ませんの事よ。

 

列にたいして関数を利用しちゃだめー!

select 名前 from 社員 where
substr(職種,1,1) = 'A'

同上です。

 

likeは前方一致しか索引使ってくれません

.... where 名前 like 'ジェフベック%'     これは前方一致でOKね。
.... where 名前 like '%ジェフベック%'    これは中間一致なのでNGね。
.... where 名前 like '%ジェフベック'     これは後方一致なのでNGね。

ですよ。

order by は、索引を利用すると早いよ

order by で使ってる列が全部索引に含まれている
かつ
索引のキーが全部 NOT NULL である事

思い出したかい?ボーイ? それとも知らなかったかい?