• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SQL文を教えてください)

SQL文の検索速度を上げる方法

このQ&Aのポイント
  • SQL文を使って1-aから5-aまでの値に対応する1-bから5-bまでの値を持つ行を抽出する方法を教えてください。
  • 遅いSQL文を使わずに、効率的に検索速度を上げる方法を教えてください。
  • 1-aから5-aまでの値がすべてnullでない行の中から、1-bから5-bまでの値がすべてnullでない行を抽出する方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

>(条件)N-aに値有りのとき、N-bは値有り > ただし、1-aから5-a全て値なしのときは対象外 と >not( >(1-a is not null AND 1-b is null) or >(2-a is not null AND 2-b is null) or >(3-a is not null AND 3-b is null) or >(4-a is not null AND 4-b is null) or >(5-a is not null AND 5-b is null) or >(1-a is null AND 2-a is null AND 3-a is null AND 4-a is null AND 5-a is null) >) の2つが、同じ意味とは思えないんですが・・ (説明と違う条件式になっていると思いますよ) #1で書いたのは・・ >N-aに値有りのとき、N-bは値有り >ただし、1-aから5-a全て値なしのときは対象外 ”N-aが値有り”の場合しか対象としないのだから、”1-aが値なし”の場合というような但し書き条件など無意味であるという話です。 最初の質問にあるSQL文は説明に合致しているとは思いますが、説明の書かれた条件そのものに無駄があると思いますよ。

u_t_flj
質問者

補足

ご指摘の通りです。 読み直すと条件の日本語がおかしいです。 条件を見直しました。 (条件) 以下(1)と(3)で構成される行。 ただし、(1)は最低ひとつ必要。  (1)N-a値有り、N-b値有り  (2)N-a値有り、N-b値無し  (3)N-a値無し、N-b値無し ※「N-a値無し、N-b値有り」のパターンは無し

その他の回答 (1)

回答No.1

速いか遅いかは表と索引の状態で変わりますので、何とも言えません。 ただ・・ ( (1-a is not null AND 1-b is not null) or (2-a is not null AND 2-b is not null) or (3-a is not null AND 3-b is not null) or (4-a is not null AND 4-b is not null) or (5-a is not null AND 5-b is not null) ) が成りな立つ時は、1-a,2-a,3-a,4-a,5-aいずれかがNOT-NULLの場合であり、必然的に not(1-a is null AND 2-a is null AND 3-a is null AND 4-a is null AND 5-a is null) を満たしているはずです。

u_t_flj
質問者

補足

すみません。SQLが間違っていました。 notを使うと遅いような気がして・・・ not( (1-a is not null AND 1-b is null) or (2-a is not null AND 2-b is null) or (3-a is not null AND 3-b is null) or (4-a is not null AND 4-b is null) or (5-a is not null AND 5-b is null) or (1-a is null AND 2-a is null AND 3-a is null AND 4-a is null AND 5-a is null) )