zoukankan      html  css  js  c++  java
  • select判断+insert插入的原子操作 pgsql

    使用insert into tablA select * from tableB语句时,

    一定要确保tableB后面的where,order或者其他条件,都需要有对应的索引,

    来避免出现tableB全部记录被锁定的情况。

    通过sql一步处理

    insert into table_name(column1,column2,column3) 
    select 'value1','value2','value3'
    where (select column from table_name where id=1) is null;

    eg:

    insert into subscribe_member(openid,msg_title,can_times)
    select 'hhhh','biaoti',1
    where (select openid from subscribe_member where id=1) is null;

    使用insert into tablA select * from tableB语句时,一定要确保tableB后面的where,order或者其他条件,都需要有对应的索引,来避免出现tableB全部记录被锁定的情况。

    https://mp.weixin.qq.com/s/B5WkFW0RkR7HgbyUdd7BFw

    最终的sql:

    INSERT INTO order_record SELECT
        * 
    FROM
        order_today FORCE INDEX (idx_pay_suc_time)
    WHERE
        pay_success_time <= '2020-03-08 00:00:00';

    补充:

    force index() 指令可以指定本次查询使用哪个索引!一条sql只会用到一个索引,mysql优化器会计算出一个合适的索引,但是这个索引不一定是最好的。force index()指令可以避免MySql优化器用到了一个低效的索引。

    mysql可能并不总会选择合适且效率高的索引去查询,这时适当的force index(indexname) 强制告诉mysql使用什么索引尤为重要。

  • 相关阅读:
    sass08 if while for each
    sass07 函数
    sass06 mixin
    sass05 数据类型,数据运算
    sass04 嵌套、继承、占位符
    批量导出docker images 的一个简单方法
    ARM 版本 瀚高 数据库的启动命令
    PHPStorm+Wamp+Xdebug+Windows7调试代码
    在Windows Server 2012 中安装 .NET 3.5 Framework
    Windows Server 2012 GUI与Core的切换
  • 原文地址:https://www.cnblogs.com/mjbenkyo/p/11990809.html
Copyright © 2011-2022 走看看