tosumalog~ IT的備忘とパパ的備忘を書き綴ります ~

tosumalog

~ IT的備忘とパパ的備忘を書き綴ります ~

SQLで否定形を使った際のフルスキャンについて

こんにちは、tosumaです。


こちら2010年の記事のアーカイブです。

シンプルなライン素材(直線)

今日は技術者としてのメモ日記。

 

いやいや、今さらですが、

考えてみると(SQLで)否定形の使い方がわからないという。

もう1年半?くらい書いているのに。

あと、NULLの検索の仕方。

 

いや、<>とか!=、NULLならIS (NOT) NULLとかですけど、

こいつらは使うとフルスキャンになってしまいます。

まぁ今までは否定は使用しないようにしてたし、

特に意識したことなかったんですが。。。

 

今回ついに避けられない事態となりました。

しかも対象は10000000件。

もらった時間は10分。

 

んー、調べたり考えた所、

DBの特徴として、NULLは=に引っかからない特徴がある。

ということで、

「CUSTOMER_CD=CUSTOMER_CD」でIS NOT NULLと同じ検索になります。

 

そして、否定。

これわかんね。

結局、ORACLEならMINUS使うか、SQL SERVERならEXCEPT使うのかな。。。

でも集合演算子使うなら最初から<>で検索した方が早いしなぁ。

 

まぁケースバイケースですが。。。

そもそもUPDATEだからなぁ。。。

 

 

と、ここでSQLSERVERでなら面白いインデックス見つけてしまった。

フィルタリングインデックス。

これはORACLEでいうファンクションインデックスのこと?

全然違うな。笑

 

なんでも最初から条件をつけたインデックスらしく、

例えば、「WHERE CUSTOMER_CD <> '10000'」とかで作ると

それ以外を保持したインデックスになるとか。

 

 

ORACLEだとあらかじめ統計情報が必要とか、

それなりに制約があるんですが。。。なにもないのかな?

 

 

とりあえず明日やってみよう。

 

 

 

あと、誰か分散トランザクションのやり方教えて。。。

お茶を濁していますが、ネットワーク経由のDBでの使い方がわからん。。。

コンポーネントオプションも、ファイアーフォール(ポート設定)もバッチしなのに。。。

 

あと、レジいじれってMSのページに書いてあったけど。。。

怖くて触れません。自分のPCならまだしも。。。

 

誰か教えて下さい。。。

シンプルなライン素材(直線) 




f:id:tay_tosuma:20200219062206p:plain

お読み頂き有難うございました。