首页 > 数据库 >oracle中insert用select方式插入慢的解决之一

oracle中insert用select方式插入慢的解决之一

时间:2023-11-15 10:12:06浏览次数:45  
标签:tgr insert lb tu persons oracle tg id select

原理我没明白,但是可以解决插入过慢的问题。

原SQL

INSERT
	INTO
	LOGINSTATBYDEPTzsy (group_id,
	persons,
	loginTimes,
	loginPersons,
	datadate,
	TYPE)
SELECT
	tg.id ,
	p.persons,
	sum(lb.LOGINAMOUNT) sum1,
	count(DISTINCT tu.id) sum2,
	1,
	2
FROM
	userdaylogininfo lb,
	tuser tu ,
	tgroup tg,
	(
	SELECT
		tgr.id,
		count(*) persons,
		ROWNUM hh
	FROM
		tuser tu,
		tgroup tgr
	WHERE
		tu.groupids LIKE ',,9001,,9002,,' || tgr.id || '%'
		AND tgr.parentid = 9002
	GROUP BY
		tgr.id
) p
WHERE
	lb.us_id = tu.id
	AND tg.parentID = 9002
	AND tu.groupids LIKE ',,9001,,9002,,' || tg.id || '%'
	AND lb.LOGINDAY >= to_date('2012-03-01', 'yyyy-mm-dd')
	AND p.id = tg.id
	AND lb.LOGINDAY < to_date('2012-04-01', 'yyyy-mm-dd')
GROUP BY
	tg.id,
	p.persons;

修改后SQL

INSERT
	INTO
	LOGINSTATBYDEPTzsy (group_id,
	persons,
	loginTimes,
	loginPersons,
	datadate,
	TYPE)
SELECT
	tg.id ,
	p.persons,
	sum(lb.LOGINAMOUNT) sum1,
	count(DISTINCT tu.id) sum2,
	1,
	2
FROM
	userdaylogininfo lb,
	tuser tu ,
	tgroup tg,
	(
	SELECT
		id ,
		persons ,
		ROWNUM HH --在最内层查询加上这个字段 或 用子查询的方式在外层查询加上
	FROM
		(
		SELECT
			tgr.id,
			count(*) persons
		FROM
			tuser tu,
			tgroup tgr
		WHERE
			tu.groupids LIKE ',,9001,,9002,,' || tgr.id || '%'
			AND tgr.parentid = 9002
		GROUP BY
			tgr.id
) pp
) p
WHERE
	lb.us_id = tu.id
	AND tg.parentID = 9002
	AND tu.groupids LIKE ',,9001,,9002,,' || tg.id || '%'
	AND lb.LOGINDAY >= to_date('2012-03-01', 'yyyy-mm-dd')
	AND p.id = tg.id
	AND lb.LOGINDAY < to_date('2012-04-01', 'yyyy-mm-dd')
GROUP BY
	tg.id,
	p.persons;

 PS:前提该insert慢不是由于select查询慢导致

标签:tgr,insert,lb,tu,persons,oracle,tg,id,select
From: https://www.cnblogs.com/xu-m/p/17833219.html

相关文章

  • element中的el-select下拉框多选显示的tags文本内容过长导致显示溢出框外
      /*select多选tags超出省略显示*/.el-select__tags-text{ display:inline-block; max-width:60px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;}.el-select.el-tag__close.el-icon-close{ top:-7px;}......
  • oracle查询表空间占用sql
    查询表空间占用SELECT tablespace_name"表空间名", 100"已使用空间(MB)", 0"剩余空间(MB)", 100"总的预分配空间(MB)", 100||'%'"已使用百分比", 0||'%'"剩余百分比"FROM ( SELECT tablespace_name FROM ......
  • Oracle启动数据库报ORA-01102解决办法
    1.机器启动之后登录服务器使用sqlplus/assysdba登录数据库发现数据库并没有启动之前把数据库服务添加过开机自启动![在这里插入图片描述](https://img-blog.csdnimg.cn/c25a5e40f3274621b708d974065bf650.png)2.使用startup命令启动数据库报错了SYS@orcl>startup;ORACLE例程已......
  • 超时实现 select 计时器
     github.com\eclipse\[email protected]\token.go//WaitTimeoutimplementstheTokenWaitTimeoutmethod.func(b*baseToken)WaitTimeout(dtime.Duration)bool{  timer:=time.NewTimer(d)  select{  case<-b.complete:    if!tim......
  • selectable方法
    复选框框架:通过调用selectable方法,进行禁用复选框。<el-tablev-loading="loading":data="studentList"@selection-change="handleSelectionChange"><\el-table>1.指定行禁用://复选框禁用selectable(row,rowIndex){//索引是从0开始,条件1是指只有第2......
  • mysql中select、from、where、group by、having、order by 、limit执行顺序
    语法顺序:select->from->where->groupby->having->orderby->limit执行顺序:from-->where-->groupby-->having-->select-->orderby-->limit1)from子句组装来自不同数据源的数据;2)使用on进行join连接的数据筛选3)where子句基于指定的条件对记录行进行筛选;4)groupby子......
  • Golang select语句代码示例
    在Go语言中,select语句用于多路选择(multiplexing),允许在多个通信操作中选择可用的操作进行执行。select语句的语法如下:select{case<-channel1://当channel1有数据可读时执行的代码casedata:=<-channel2://当channel2有数据可读时执行的代码,同时将读取的数据存储在......
  • Oracle sql自定义统计月范围
     思路: 1,使用SUBSTR(to_char(INSPECTION_DATE,'yyyy-mm-dd'),-2)取出天数, 2,使用case……when……then……判断取出的天数是否大于等于25号,如果是则将日期设置成下月第一天 如果小于等于24号,则设置成当月第一天 3,使用TRUNC(ADD_MONTHS(INSPECTION_DATE,1),'mm')增......
  • Oracle DG 主从延时判定
    一、主从应用模式1、ADG与普通归档模式colnamefora50;setlines300;--SWITCHOVER_STATUS:SESSIONSACTIVEselectSWITCHOVER_STATUS,NAME,PROTECTION_MODE,OPEN_MODE,LOG_MODE,DATABASE_ROLE,DB_UNIQUE_NAMEfromv$database;--如果process:MRP0:WAIT_FOR_LOG则为ADG,如果......
  • Oracle进程管理(下)
    五、配置数据库常驻连接池  数据库服务器预先配置为允许数据库常驻连接池。但是,必须通过启动连接池显式启用此功能。1.数据库常驻连接池初始化参数  使用DRCP_DEDICATED_OPT初始化参数配置使用数据库常驻连接池(DRCP)的专用优化。您可以通过将drcp_dedicated设置为Yes来启用专......