- ベストアンサー
SQL文の検索速度を上げる方法
- SQL文を使って1-aから5-aまでの値に対応する1-bから5-bまでの値を持つ行を抽出する方法を教えてください。
- 遅いSQL文を使わずに、効率的に検索速度を上げる方法を教えてください。
- 1-aから5-aまでの値がすべてnullでない行の中から、1-bから5-bまでの値がすべてnullでない行を抽出する方法を教えてください。
- みんなの回答 (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文は説明に合致しているとは思いますが、説明の書かれた条件そのものに無駄があると思いますよ。
その他の回答 (1)
- k_o_r_o_c_h_a_n
- ベストアンサー率55% (526/942)
速いか遅いかは表と索引の状態で変わりますので、何とも言えません。 ただ・・ ( (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) を満たしているはずです。
補足
すみません。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) )
補足
ご指摘の通りです。 読み直すと条件の日本語がおかしいです。 条件を見直しました。 (条件) 以下(1)と(3)で構成される行。 ただし、(1)は最低ひとつ必要。 (1)N-a値有り、N-b値有り (2)N-a値有り、N-b値無し (3)N-a値無し、N-b値無し ※「N-a値無し、N-b値有り」のパターンは無し