关于这个SQL帮忙给点建议

hey_you 2004-04-19 06:11:01
有这样一张表,字段如下:

UserNumber(用户号码)
AppID(应用代码)
ChargeTime(扣费时间)

UserNumber里既有联通用户也有移动用户,我要完成一个包月扣费的动作。

移动用户和联通用户要分开处理,因此SQL里需要区分出UserNumber是联通的还是移动的。

目前批量的处理的Where条件:

移动的:
WHERE ChargeTime<=TO_DATE('现在的时间','YYYY-MM-DD') AND
(SubStr(UserNumber,3,1) IN ('5','6','7','8','9')) AND
AppID='xxx'

联通的:
WHERE ChargeTime<=TO_DATE('现在的时间','YYYY-MM-DD') AND
(SubStr(UserNumber,3,1) IN ('0','1','3')) AND
AppID='xxx'

有没有改进意见?多谢!
...全文
63 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
hey_you 2004-04-30
  • 打赏
  • 举报
回复
谢谢大家
wonderfulday 2004-04-27
  • 打赏
  • 举报
回复
条件可以这样写:
联通的 where UserNumber between '13000000000' and '13399999999';
移动的 where UserNumber between '13500000000' and '13999999999';
where条件中对字段最好别用函数像你上面的SubStr(UserNumber,3,1)对字段用函数处理的话,你对这个字段健的索引就起不到作用了
beckhambobo 2004-04-20
  • 打赏
  • 举报
回复
对于移动与联通项目,数据量非常大,大表最好还是分区办法,采用局部索引
beckhambobo 2004-04-20
  • 打赏
  • 举报
回复
简单来说,把移动数据列为一分区,联通数据分为一区。
局部采用细分区(散列、范围等)
详情参考:
http://download-west.oracle.com/docs/cd/B10501_01/server.920/a96524/c12parti.htm#464767
ycbao 2004-04-20
  • 打赏
  • 举报
回复
表上在加个字段,区分运营商标志
shuipipi 2004-04-20
  • 打赏
  • 举报
回复
条件有了,还要看一下泥提取的内容是怎样的?单从泥的条件语句来看,可以用DECODE来对移动和联通用户进行区分,通过减少对数据库的访问次数,从而使条件进行优化,不过还不大清楚泥提取的内容是否利用了汇总函数?
snowy_howe 2004-04-20
  • 打赏
  • 举报
回复
首先“只是现在用户量不会太大,所以不想把系统搞得很复杂。”这句话,我觉得
还是要考虑系统的健壮性。
其次,这个语句本身如果逻辑没错的话,实在看不出来需要优化什么。
最后,如果没有性能问题的话,最好还是维持原状。
hey_you 2004-04-20
  • 打赏
  • 举报
回复
谢谢楼上各位了,除了数据库本身的调整,SQL上有没有什么优化?

我非常同意beckhambobo(beckham) 的意见,分表是肯定的,只是现在用户量不会太大,所以不想把系统搞得很复杂。
lhj 2004-04-19
  • 打赏
  • 举报
回复
建议表建立在2个分区上,数据插入时把SubStr(UserNumber,3,1)为('5','6','7','8','9'))的数据存储在一个分区(partion yidong),其他的存储在另外一个分区(partion liantong)。这样统计会快很多。
guangli_zhang 2004-04-19
  • 打赏
  • 举报
回复
在数据更新时,可能是新增时
把SubStr(UserNumber,3,1),先生成保存在一个字段中
可能速度会有所提高
wwh207 2004-04-19
  • 打赏
  • 举报
回复
gz
bzszp 2004-04-19
  • 打赏
  • 举报
回复
创建一个这样的索引试试
create index idx_name tbname(SubStr(UserNumber,3,1));

17,090

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧