对过程的调用不断加载,占用大量cpu,并且失败

kq0g1dla  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(395)

我正在尝试创建一个过程,该过程将获取一个由数千条记录组成的视图表,并根据各种条件删除多条记录来对其进行过滤。
当我尝试使用调用来运行它时,它会继续加载,根据whm panel,这个进程(phpmyadmin/import.php)占用了大约90%的cpu资源。最终,可能在10分钟后由于超时而失败:
静态分析:
分析中发现1处错误。
缺少表达式(位置25处“开”附近)sql查询:编辑
设置外键\u checks=on;
mysql说:文档

2006年的今天,mysql服务器消失了

我使用以下代码,新的视图表使用3个db表: vw_r2_items_tr ,正在使用 tr db核心表和 vw_items -使用 items 以及 visits 核心表

  1. DELIMITER $$
  2. CREATE VIEW `vw_r2_items_tr` AS
  3. SELECT
  4. IF((`i`.`id` = `t`.`item_ord`),1,0) AS `has_tr`,
  5. `i`.`calculated_score` AS `calculated_score`,
  6. `i`.`visited_at` AS `visited_at`,
  7. `i`.`ip_address` AS `ip_address`,
  8. `i`.`user_id` AS `user_id`,
  9. `i`.`visit_id` AS `visit_id`,
  10. `i`.`product_id` AS `product_id`,
  11. `i`.`name` AS `name`,
  12. `i`.`id` AS `id`,
  13. `i`.`item_no` AS `item_no`,
  14. FROM (`vw_items` `i`
  15. LEFT JOIN `trs` `t`
  16. ON (((`t`.`visit_id` = `i`.`visit_id`)
  17. AND (`t`.`item_ord` = `i`.`id`))))$$
  18. DELIMITER ;
  19. DELIMITER $$
  20. CREATE PROCEDURE `vw_unique_trs2`()
  21. BEGIN
  22. SET @vat=0;
  23. SET @ht=0;
  24. SET @tdiff=0;
  25. -- EXPLAIN
  26. SELECT
  27. COUNT(*) AS ct,
  28. tb1.* FROM (SELECT it.*, @tdiff:=UNIX_TIMESTAMP(CONVERT_TZ(it.visited_at,'+00:00',@@global.time_zone)) AS tdiffs,
  29. IF(@vat > 0 AND ((@vat-@tdiff) < 28800 AND (@vat-@tdiff) > -28800),@vat DIV 28800, @tdiff DIV 28800) AS diff,
  30. @ht:=(IF(@vat > 0 AND ((@vat-@tdiff) < 28800 AND (@vat-@tdiff) > -28800),@ht+has_tr,has_tr)) hts,
  31. @vat:=(IF(@vat > 0 AND ((@vat-@tdiff) < 28800 AND (@vat-@tdiff) > -28800),@vat,@tdiff)) curr_vat
  32. FROM (SELECT * FROM (SELECT * FROM `vw_r2_items_tr` ORDER BY has_tr DESC, item_no, visited_at) AS tb
  33. GROUP BY `tb`.`visit_id`,`tb`.`product_id`) AS it
  34. ORDER BY has_tr DESC, it.visited_at DESC
  35. ) AS tb1
  36. GROUP BY user_id, calculated_score, diff, hts;
  37. END$$
  38. DELIMITER ;
9bfwbjaz

9bfwbjaz1#

我想你不能只用一个“开”和两个连接,试着这样做两个连接查询

  1. `SELECT *
  2. FROM Table1
  3. LEFT JOIN Table2 ON Table1.key = Table2.key` and
  4. LEFT JOIN Table3 ON Table1.key = Table2.key`

相关问题