Oracle之SQL基础篇

建表的几条原则

  • 表数据量是随着时间持续增加(像订单类表),并且运行一年后,表记录数超过2000万条,则需要考虑表分区。
  • 如果表数据基本上是静态的(像用户信息表),一般不考虑分区。如果记录数接近亿条,则可以考虑用HASH分区。
    • 表命名规范
  • 表名只能使用字母、数字和下划线,字母都小写。
  • 数据库里若存在多个用户,则以用户名简写开头,比如用户库的表以USR_开头,订单库的表以ORD_开头;若只有一个用户,则以t(表)或v(视图)开头。
  • 临时表以tmp_开头;备份表以bak_开头。
  • 表的字段数量不超过30个,在非必要的情况下不要使用clob等大字段。一张表里所有字段的总长度尽量小,绝对不要超过8000(数据块大小就是8K)。
  • 不同表里相同意义的字段,取名一样。列如A表的更新时间字段取名update_time,那B表就不要再取名modify_time。
  • 选择字段类型的时候,能用number就不要用varchar2。做查询的时候,同等条件的number效率比varcha2高。
  • 值为枚举型值的字段,用number(1)或者char(1);如果有超过10个以上的枚举值,用char(2)。多个表里该类字段的值定义要一致。如a表status=0表示正常,则b表也应一样定义。这里可以约定一下:用char做类型时,值为A、B、C这样的字母类型;用number做类型时,值为0-9,这样方便区分。
  • 字段尽量设置为not null,或者设置默认值。
    • 备注
  • 表和字段,都需要有comment,尤其是枚举型值字段。
  • 建索引

    • 与mysql索引区别
  • 在mysql中,每个表都会有一个id字段做主键,也就是聚簇索引,其它的辅助索引都要通过聚簇索引来查询。
  • 在oracle中,所有的索引都是通过rowid直接查询的,不存在“二次查询”,所有如果该id字段不与其他表做管理,则在表设计时不需要该字段。
    • 指定表空间
  • 将表数据和索引数据分开存储。建索引时明确指定表空间。
    • 数量
  • 索引数量不宜过多,一般情况下4个以内;索引太多会影响记录的插入。
    • 复合索引
  • 个人认为为了限制记录的唯一性时,可以建唯一索引;否则如果几个字段均有可能作为查询条件时,可以分成多个索引。
  • 复合索引字段的先后顺序很重要,第一个字段必须是查询时使用最频繁的,否则有可能用不到索引。举个不恰当的例子:用户信息表里有证件类型(cert_type)和证件号码(cert_no),建唯一索引的时候,索引字段顺序肯定是需要cert_no,cert_type,而不是cert_type, cert_no。因为查询的时候,很有可能只是用了cert_no,而没用到cert_type。我说“不恰当”,是因为oracle的CBO比较厉害,在使用cert_type,cert_no作为复合索引的时候,oracle会分析后以跳跃索引处理,仍然能用到索引。
  • SQL基本规范

    • 日期类型字段用法

    错误用法:to_char(create_time)>’20220101’

    正确用法:create_time>to_date(‘20220101’,’yyyymmdd’)+0.999

    说明:create_time为date类型,如果create_time字段有索引,加了函数就会用不到索引。

    • 写查询条件时,字段类型必须一致

    比如,status为char(1),就不要写成status=1,而是status=’1’。否则后续若status字典值扩展了,用了字母,sql就会报错。

    • 索引列字段不用函数,查询时要尽可能将函数操作移至等号右边。
    • 尽量避免使用order by和group by排序操作,大量的排序操作影响性能。如必须使用排序操作,尽量用在有索引的列上。
    • 数据清理时的注意点:
  • 做delete或update数据时,首先要select count(*)一下,计算一下受影响的记录数。
  • 如果受影响记录数是百万级的,或者查询条件是全表扫描的,那务必在查询条件增加个rownum<=10000,一次影响1万条。
  • 举例1:(删除500万行记录)
  • declare

    i integer:=500;

    begin

    while i>0 loop

    delete from oper_log t where t.create_time<to_date('20220228','yyyymmdd') and rownum<=10000;

    commit;

    i := i-1;

    end loop;

    end;

  • 举例2:(按天清理数据到备份表)
  • declare

    i integer:=200;

    mindate varchar2(8) :=’20211001′;

    maxdate varchar2(8) :=’20211231′;

    currdate varchar2(8) := mindate;

    begin

    while currdate <= maxdate loop

    insert into bak_oper_log

    select * from oper_log t where t.create_time<to_date(currdate,'yyyymmdd');

    delete from oper_log t where t.create_time<to_date(currdate,'yyyymmdd');

    commit;

    currdate := to_char(to_date(currdate,’yyyymmdd’)+1,’yyyymmdd’);

    end loop;

    end;

    郑重声明:本文内容及图片均整理自互联网,不代表本站立场,版权归原作者所有,如有侵权请联系管理员(admin#wlmqw.com)删除。
    用户投稿
    上一篇 2022年6月21日 18:16
    下一篇 2022年6月21日 18:16

    相关推荐

    • 客服的岗位职责怎么写(客服工作内容及职责)

      各位小伙伴们大家周一好,又到了每周一给大家分享干货内容的时候啦~ 本期来跟大家分享一下客服工作管理流程以及客服岗位里面的每项职能岗位的核心细则,也是干货满满推荐收藏~ 一.补偿流程…

      2022年11月25日
    • 什么是推广cpa一篇文章带你看懂CPA推广渠道

      CPA渠道 CPA指的是按照指定的行为结算,可以是搜索,可以是注册,可以是激活,可以是搜索下载激活,可以是绑卡,实名认证,可以是付费,可以是浏览等等。甲乙双方可以根据自己的情况来定…

      2022年11月25日
    • 抖音直播带货有哪些方法技巧(抖音直播带货有哪些痛点)

      如今抖音这个短视频的变现能力越来越突显了,尤其是在平台上开通直播,更具有超强的带货属性,已经有越来越多的普通人加入到其中了。不过直播带货虽然很火,但是也不是每个人都能做好的,那么在…

      2022年11月24日
    • 淘宝直播开通后带货链接怎么做(淘宝直播需要开通淘宝店铺吗)

      直播带货无论是对于商家来说还是主播收益都是非常可观的,所以不少平台都有直播带货功能,一些小伙伴也想加入淘宝直播,那么淘宝直播开通后带货链接怎么做?下面小编为大家带来淘宝直播开通后带…

      2022年11月24日
    • 明查|美国新冠后遗症患者中有16%症状严重以致无法工作?

      点击进入澎湃新闻全球事实核查平台 速览 – 网传数据比例无权威信源佐证,该比例有可能是结合了美国疾病防控中心和布鲁金斯学会的数据得出,但这两个机构的调研目的和样本都不同…

      2022年11月24日
    • 小红书入驻条件及费用(小红书开店)

      小红书喊你回家开店! 有不少用户都发现,最近在逛小红书的时候,笔记上面多出了一个图片标签,点进入之后便可进入下单页面,还可以通过商品页面找到相关店铺,大大缩短了交易路径。 “很方便…

      2022年11月23日
    • 快手限流多久能解除(快手限流什么意思)

      我相信很多人都看中了快手平台的商机,都争先恐后地想要抢占机会,可一些人刚刚作出一点成绩,就被降权了,自己也不知道什么原因。所以今天就来聊聊快手账号降权操作分享,赶快来看看避免违规!…

      2022年11月23日
    • Win11 22H2再出新问题Bug:无法弹出USB设备

      作为Windows 11的首次大更新,在Win11 22H2发布后并没有带来预想的场景,各种问题频现成为了一种常态。 近日有消息称,Win11 22H2存在一个占用冲突Bug,当用…

      2022年11月22日
    • 想学美工从哪里学起(淘宝美工如何自学)

      其实学习淘宝美工这件事情,不并像大家想的那么艰难,万事开头难,只要我们迈出第一步,并且在以后的每一步都踏踏实实、认认真真的去做,那么学习淘宝美工并不是一件如登天一样的难事。如果说我…

      2022年11月22日
    • 重庆高风险区一般多长时间解除(重庆成都是高风险区吗)

      重庆这几天的疫情新增情况也是比较严重的,大家对近期的重庆疫情防控措施也都十分关注,据悉目前重庆还存在不少的疫情高风险地区。那么,重庆高风险区一般多长时间解除?对于高风险地区解封时间…

      2022年11月21日

    联系我们

    联系邮箱:admin#wlmqw.com
    工作时间:周一至周五,10:30-18:30,节假日休息