先上查询语句
select u.c_user_id 用户编号, u.c_old_user_id 旧编号, u.c_user_name 用户名称, u.c_user_address 用户地址, 日志说明 日志说明, 操作人 操作人, 操作时间 操作时间, 备注原因 备注原因 from yx_user u, (select regexp_substr(substr(l.c_log, 1, 13), '[0-9]*[0-9]', 1) 用户编号, l.c_log 日志说明, q.c_user_name 操作人, l.d_log_operation_time 操作时间, l.c_log_remark 备注原因 from yx_log l, qx_systemuser q where q.n_systemuser_id = l.n_log_operator_id and l.d_log_operation_time between to_date('2020/9/26 0:00:00', 'yyyy-MM-dd hh24:mi:ss') and to_date('2020/10/27 23:59:59', 'yyyy-MM-dd hh24:mi:ss') and l.n_log_name_id = 3 and l.n_log_operator_id = 1) w where (u.c_user_id = w.用户编号 or u.c_old_user_id = w.用户编号) order by 操作时间 desc
上面查询sql 只有两会在那个表 u 和 w ,w 里面的sql 没有出现查询慢的情况。
(u.c_user_id = w.用户编号 or u.c_old_user_id = w.用户编号)
上面条件 使得查询语句贼慢;
优化如下:
(case when length(u.c_user_id) =13 then u.c_user_id else u.c_old_user_id end = w.用户编号 )
优化以后可以说是差不出来数据和秒出的区别
数据量 u表是 主表 大概有几万条数据 w表是临时表 应该就百十来条数据; 第一条查询条件个人理解就是遍历查询两次 第二条 就是遍历查询一次;
深层理解 请参考:https://www.cnblogs.com/kerrycode/p/11911998.html
做个记录;理解偏差很大 ;以后弥补
标签:语句,log,变慢,用户,查询,user,编号,id 来源: https://www.cnblogs.com/pyf97/p/13883457.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。