我要回到这里,因为我再次需要你的帮助! 以下哪项是更好的选择?
问题是:
我有myTable
表['DateYYYYMMDD','field1', 'field2', 'field3', 'MyField']
,每天有人插入许多记录。
我必须创建 2(快速)观看次数myView1
和myView2
,用于选择过去30天内创建的记录(来自myTable
),并且不同的MYFIELD
值。
我找到了一些不同的简单解决方案,我想知道哪个最快:
解决方案1
--myView1:
select field1, field2, ...., fieldn, MYFIELD
from myTable
where DateYYYYMMDD > sysdate -30
and MYFIELD in ('65643L', '65643L174', '65643L8N',
...
'6564L7174', '6564L78N','6564L78N_2O15',
...
'6564L78N3226T2_2O15', '6564L78N8N322',
'6564L78N6T2', '6564L78N6T2_2O15',
'6564L7-NOTT1-6T2', '6564L76T2',
...
'6563XP8N322', '6563XP8N322_2O15',
'6563XP8N3226T2', '6563XP8N3226T2_2O15',
'6563XP8N6T2', '6563XP-NOTT1-6T2',
'6563XP6T2', '9563XPT1',
'9563XPT1_2O15',
...
'9566UB', '9566UB_2O15',
'9566UB174', '9566UB8N',
'6566UB8N_2O15', '6566UB8N174',
'6566UB8N322',
...)
myView2:
select field1, field2, ...., fieldn, MYFIELD
from myTable
where DateYYYYMMDD > sysdate -30
and MYFIELD in ('9P26_B', '9P26_BN',
'9P26_8N',
...
'9P26_8NN', '9P26_2O158N9',
'556_B', '556_8N',
...
'5566NP4P', '696N65T',
'696N65T6T2',
...
'696W1P_B', '696W1P_8N')
- 解决方案2
--myView1:
select field1, field2, ...., fieldn, MYFIELD
from myTable
where DateYYYYMMDD > sysdate -30
and (MYFIELD like '656%' or MYFIELD like '956%')
--myView2:
select field1, field2, ...., fieldn, MYFIELD
from myTable
where DateYYYYMMDD > sysdate -30
and (MYFIELD like '9P26%'
or MYFIELD like '556_%'
or MYFIELD like '5566%'
or MYFIELD like '696%')
- 解决方案3
--myView1:
select field1, field2, ...., fieldn, MYFIELD
from myTable
where DateYYYYMMDD > sysdate -30
and (REGEXP_LIKE(MYFIELD, '^656') or REGEXP_LIKE(MYFIELD, '^956'))
--myView2:
select field1, field2, ...., fieldn, MYFIELD
from myTable
where DateYYYYMMDD > sysdate -30
and (REGEXP_LIKE(MYFIELD, '^9P26')
or REGEXP_LIKE(MYFIELD, '^556_')
or REGEXP_LIKE(MYFIELD, '^5566')
or REGEXP_LIKE(MYFIELD, '^696'))
我希望这能解释我的需求,如果有更好的解决方案,请提出建议! 非常感谢你!
答案 0 :(得分:4)
为什么不使用LIKE?
--myView1:
select field1, field2, ...., fieldn, MYFIELD
from myTable
where DateYYYYMMDD > sysdate -30
and
MYFIELD like '656%' or MYFIELD like '956%'
等
REGEXP功能强大但不快。
答案 1 :(得分:1)
就像@Tony安德鲁斯说的那样,我会避免使用REGEXP_LIKE选项,因为你不需要它提供的任何LIKE没有的功能。
拥有合适的索引比在IN和LIKE之间切换更有帮助。理想情况下,你会在DateYYYYMMDD,MYFIELD上有一个索引。如果你这样做,如果IN / LIKE之间的区别与你如何使用它们有任何明显的区别,我会感到惊讶。