質問編集履歴

2

2017/11/30 14:53

投稿

jimxx
jimxx

スコア8

test CHANGED
File without changes
test CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  仕様をそのままコーディングすると
8
8
 
9
- WHERE NOT SUBSTR(ID,-1)
9
+ WHERE NOT SUBSTR(ID,-1) = '1'
10
10
 
11
11
  となると思いますが、
12
12
 

1

2017/11/30 14:53

投稿

jimxx
jimxx

スコア8

test CHANGED
File without changes
test CHANGED
@@ -1,16 +1,20 @@
1
1
  SQLの性能について質問です。
2
2
 
3
- Oracleにて、抽出条件が『ID(varchar2)の下一桁が「1」でないレコード』というSQLを作成しています。(IDは索引付きのカラムです。)
3
+ Oracle 11gにて、抽出条件が『ID(varchar2)の下一桁が「1」でないレコード』というSQLを作成しています。(IDは索引付きのカラムです。)
4
4
 
5
5
 
6
6
 
7
+ 仕様をそのままコーディングすると
8
+
7
9
  WHERE NOT SUBSTR(ID,-1)
8
10
 
11
+ となると思いますが、
12
+
9
- とすると、NOTにより索引走査ではなく全表走査となると認識していますが、
13
+ NOTにより索引走査ではなく全表走査となると認識しています
10
14
 
11
15
 
12
16
 
13
- 代わりに
17
+ そのため性能の良いSQLを検討中ですが、
14
18
 
15
19
  REGEXP_LIKE(ID,'[^1]$')
16
20
 
@@ -18,7 +22,7 @@
18
22
 
19
23
 
20
24
 
21
- LIKEは条件によっては索引走査されると聞きまし、REGEXP_LIKE情報がなく困っています。
25
+ LIKEはワイルドカードの前までは索引走査されると聞のでそうするとREGEXP_LIKEも全表走査されると予想していますが、情報がなく困っています。
22
26
 
23
27
  もし結局性能が変わらないようであれば、NOT SUBSTRの方が可読性が高いので採用したいと思っています。
24
28