问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

求大神帮我看看这个mysql存储过程。我用event调用的时候,运行速度慢的可怜,3个小时仍未完成。

发布网友 发布时间:2022-04-08 20:31

我来回答

3个回答

懂视网 时间:2022-04-09 00:52

(推荐教程:mysql视频教程)

SQL MINUS运算符简介

MINUS在包含SQL标准的三个操作之一UNION,INTERSECT和MINUS。

MINUS比较两个查询的结果,并返回第一个查询中不是由第二个查询输出的不同行。

MINUS 指令是运用在两个 SQL 语句上。它先找出第一个 SQL 语句所产生的结果,然后看这些结果有没有在第二个 SQL 语句的结果中。如果有的话,那这一笔资料就被去除,而不会在最后的结果中出现。如果第二个 SQL 语句所产生的结果并没有存在于第一个 SQL 语句所产生的结果内,那这笔资料就被抛弃。

以下说明了MINUS运算符的语法:

SELECT column_list_1 FROM table_1
MINUS 
SELECT columns_list_2 FROM table_2;

使用MINUS运算符的查询的基本规则如下:

  • 数量和两列的顺序column_list_1column_list_2必须相同。

  • 两个查询中相应列的数据类型必须兼容。

  • 假设我们有两个表t1并t2具有以下结构和数据:

    CREATE TABLE t1 (
     id INT PRIMARY KEY
    );
     
    CREATE TABLE t2 (
     id INT PRIMARY KEY
    );
     
    INSERT INTO t1 VALUES (1),(2),(3);
    INSERT INTO t2 VALUES (2),(3),(4);

    以下查询返回t1表的查询中的不同值,这些值在表的查询结果中找不到t2。

    SELECT id FROM t1
    MINUS
    SELECT id FROM t2;

    1.png

    以下是MINUS图说明:

    2.png

    MySQL MINUS运算符

    不幸的是,MySQL不支持MINUS运算符。但是,您可以使用MySQL JOIN来模拟它。

    要模拟MINUS两个查询,请使用以下语法:

    SELECT 
     column_list 
    FROM 
     table_1
     LEFT JOIN table_2 ON join_predicate
    WHERE 
     table_2.id IS NULL;

    例如,以下查询使用LEFT JOIN子句返回与MINUS运算符相同的结果:

    SELECT 
     id
    FROM
     t1
     LEFT JOIN
     t2 USING (id)
    WHERE
     t2.id IS NULL;

    热心网友 时间:2022-04-08 22:00

    提供过程中涉及的几个问题的思路:
    1 删除环节:es_stat_logondays_user 表的数据量是多少,数据超过几十万以上的话,建议使用truncate table (需要支持的mysql版本)或删表重建方式(需要权限支持);
    2 查询环节(这个是最重要的环节):优化下insert 中的select 查询吧;
    其中的s 虚表的子查询部分先优化下,条件里对字段使用CONCAT应该是忌讳。

    (select DISTINCT v.adminId,v.courseId from view_stattologondays_user v ,(
    select admin_id,course_id from es_stu_record
    where action_type=6 group by admin_id,course_id) e where CONCAT(ifnull(v.adminId,111),ifnull(v.courseId,222))!= CONCAT(ifnull(e.admin_id,111),ifnull(e.course_id,222))
    ) s
    3 插入环节:es_stat_logondays_user 的索引和外键情况如何,尝试在insert 前加上:
    set sql_log_bin = 0;
    set unique_checks = 0;
    set foreign_key_checks = 0;追问select v.adminId,
    v.courseId from view_statToLogonDAYS_user v
    minus
    select e.admin_id,e.course_id from es_stu_record e
    where e.action_type=6 group by e.admin_id,e.course_id
    我这个是根据原来oracle改的,请问这个minus这里换成mysql中的话应该改成什么语法?

    追答1 minus在mysql里可使用左连接的方式实现,如下

    select distinct v.adminId, v.courseId from view_statToLogonDAYS_user v
    left join
    (select e.admin_id, e.course_id from es_stu_record e
    where e.action_type=6 group by e.admin_id,e.course_id ) e
    on v.adminId = e.admin_id and v.courseId = e.course_id
    where e.admin_id is null and e.course_id is NULL

    2 请对左连接和内连接方式均进行下测试,包括explain、sum结果是否一致、实际运行的情况;
    实践是最好的大神。

    热心网友 时间:2022-04-08 23:18

    查询出来的结果用变量试试。然后插入的时候直接用变量插入。
    声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
    狐外婆是什么意思? ...都流,有几年了,吃香蕉水果时也流,到底什么原因啊,维生素c也补了也没... 我的牙龈经常出血,刷牙出得最凶,有时候吃香蕉都会出血,请问是什么原 ... 如何通过社交软件添加好友? 过年送礼送购物卡合适吗? 林上的UV能量测试仪的自动和手动模式有什么区别啊?什么情况下用的... 什么是建设银行金卡 建行信用金卡有什么好处 紫外测试仪UV能量计常见问题解答 020028什么卡 请问深圳市罗湖区建设路南方证券大厦B座23楼是什么公司? 在深圳大学怎样坐车到罗湖区建设路南方证券大厦 从华强北到南方证券大厦怎么走? 从深圳西站到建设路2016号南方证券大厦怎么走 充电器插头怎么拆开 从深圳布吉检查站去到深圳罗湖区建设路南方证券大厦怎么坐公车去啊,急急急 从罗湖人才市场到罗湖区建设路2016号南方证券大厦12楼的坐车路线 请问罗湖区建设路南方证券大厦离火车站有多远?怎么坐公车去? 广东省深圳市罗湖区建设路南方证券大厦邮编是什么? 北派盗墓笔记红姐结局 南方证券大厦的大厦分支 盗墓笔记小说全集百度云 从罗湖火车站到南方证券大厦怎么走 联通小米6XMIUI10如何设置省电? 北派盗墓笔记一颗痣陈红的结局 北派盗墓笔记是真的吗 胡利群在北派盗墓笔记中什么时候出现过 这MIUI10系统稳定版耗电快吗? 盗墓笔记 全集 北派盗墓笔记回关看不懂 深圳市富邦基金管理有限公司怎么样? 从南方证券大厦到地铁大厦怎么走?求解 深圳宜财信息咨询有限公司怎么样? 深圳亚富路小额贷款有限公司怎么样? 深圳华富嘉洛投资顾问有限公司怎么样? 深圳市东海顺祥能源股份有限公司怎么样? 深圳市日辉建筑工程有限公司怎么样? 谁知道这个卡通人物是什么 我想知道 这个卡通人物叫什么 急!!想知道这个是什么卡通人物,下图所示 你心中最了不起的卡通人物是谁,他做了什么了不起的事情?请 你写一写 请问各位大人:这个卡通人物到底叫什么?出自哪部卡通故事呀? 谁知道这个卡通人物叫什么 太阳能采光板是怎么知道多少伏的? 我想知道 这个卡通人物 是什么动画片里的 知道的回答下 谢谢 福州鱼豆腐的家常做法? 太阳能电池板怎样确定它是14v或者18v 谁知道这个卡通人物叫什么? 求大神帮忙看这块太阳能板是多少伏的 求大量日本魔法动漫(人物要好看~~~)