Genero SQL Performance

来源:互联网 发布:歌词编辑软件 编辑:程序博客网 时间:2024/06/01 10:35

  企业规模的不断发展,导致的是ERP数据的成倍增长。我们经常遇到一支报表程式在运行了几年以后,开始出现呆滞,给用户带来极大的困扰,这时,你不得不重新优化或者重新编写代码。作为一名合格的ERP开发者,我们必须提高数据防患意识,从效能上保证程式今天以及未来的可用性。下面从DB的角度谈谈如何编写高效能的Genero DB语句:


1.避免多次执行同一静态SQL语句,应使用更高效的动态SQL语句替代

例如:

   FOR i = 1 TO 1000

       INSERT INTO TABLE VALUES (a , b)

 END FOR

实际上该语句等同于:

  FOR i = 1 TO 1000

     PREPARE s1 FROM "INSERT INTO TABLE VALUES (a , b)"

     EXECUTE  USING a, b

  END FOR

我们应该用以下语句替代:

PREPARE s1 FROM "INSERT INTO TABLE VALUES (a , b)"

FOR i = 1 TO 1000

    EXECUTE  USING a, b

END FOR


2.尽可能的减少数据库链接操作

还拿案例1做说明,其实还可以进一步优化。

PREPARE s1 FROM "INSERT INTO TABLE VALUES (a , b)"

FOR i = 1 TO 1000

    EXECUTE  USING a, b

END FOR

该语句将每次执行的结果都提交一次,总共执行了1000次SQL提交动作

为了减少提交操作,我们这样写会更高效:

PREPARE s1 FROM "INSERT INTO TABLE VALUES (a , b)"

BEGIN WORK

FOR i = 1 TO 1000

    EXECUTE  USING a, b

END FOR

COMMIT WORK

但是这里我们要注意,这1000个未提交的transaction实际上是保存在内存里的,有可能因为数据太大导致溢出的错误(具体你的服务器能承载多大的数据,你可能要写一些程式测试一下),所以如果数据真的很大,我们可以分批提交,你可以这样写:

PREPARE s1 FROM "INSERT INTO TABLE VALUES (a , b)"

BEGIN WORK

FOR i = 1 TO 1000

    IF i MOD 100 == 0 THEN

        COMMIT WORK

        BEGIN WORK

   END IF

    EXECUTE  USING a, b

END FOR

COMMIT WORK

最后送给初学者一句真诚的话:ERP开发不只是实现功能,更要追求实现的效果

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 华为账号换了手机密码忘记了怎么办 用u盘制作音响喊话内容怎么办 新三板公司退市了小股东怎么办? 新三板公司退市股东股票怎么办 利群收购乐天玛特超市卡怎么办 买房过户夫妻一方是外省户口怎么办 欠了国美金融贷款没钱还会怎么办? 国企员工涨工资不在编的员工怎么办 装车牌照的螺丝孔小了怎么办 北京摇号之后中签和未中签怎么办 拉轿车的大车出车祸车怎么办 美图m6手机忘记锁屏密码怎么办 微信验证码登录收不到验证码怎么办 微信被限制登录收不到验证码怎么办 微信登录申诉收不到短信怎么办 登录微信手机收不到验证码怎么办 美图t8冲一会电就发烧怎么办 美图t8系统不小心升级了 怎么办 美图手机看相册视频就会变黑怎么办 苹果4s屏幕唤醒速度慢怎么办 美图m4换电池后不显示卡怎么办 美图手机久没充电再充没反应怎么办 美图6s开不开机怎么办 苹果4s照片不能拍照黑屏怎么办 美图手机开机键坏了怎么办 金立金刚二手机烧卡怎么办 金立金刚手机开不开机怎么办 小米4手机拆机信号不好怎么办 荣耀自带游览器无法正常打开怎么办 苹果4s电池越来越不耐用怎么办 苹果4s电池不耐用了怎么办 苹果手机4s电池不耐用怎么办 红米4s电池不耐用怎么办 32位app私密相册打不开怎么办 红米手机取卡针断手机里了怎么办 我差评了客服打电话骂我怎么办 顺丰快递在预计时间没有回来怎么办 同款商品比京东便宜怎么办 京东自营不支持7天退货怎么办 天猫买了一个月的电动车坏了怎么办 发票号码和机打号码不一致怎么办