免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4088 | 回复: 3
打印 上一主题 下一主题

请问一下,这条SQL 能优化吗? [复制链接]

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-01-09 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-01-06 23:03 |只看该作者 |倒序浏览
set @x_sum_zs=(SELECT id from __TABLE__ order by rq desc limit 1)+1;
set @x_sum_px=@x_sum_zs;

select *,@x_sum_px:=(@x_sum_px-1) as sum_px,
(SELECT SUM(hsl) from __TABLE__ where id between @x_sum_px and @x_sum_zs ) as hsl_sum ,
(SELECT SUM(cjl) from __TABLE__ where id between @x_sum_px and @x_sum_zs ) as cjl_sum ,
(SELECT SUM(zdf) from __TABLE__ where id between @x_sum_px and @x_sum_zs ) as zdf_sum ,
(SELECT SUM(cjje) from __TABLE__ where id between @x_sum_px and @x_sum_zs ) as cjje_sum
from __TABLE__ order by id desc limit 370

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
2 [报告]
发表于 2016-01-15 10:49 |只看该作者
昨天语句发不上来,被拦截了,还没通过。想一下有什么办法可以发上来呢

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
3 [报告]
发表于 2016-01-15 10:50 |只看该作者
这是测试的结果,看上去一样,但是略有改动,可能在你那运行的结果也不一样。另外效率也不一定更高,所以仅供参考一下啊。
  1. mysql> select * from test4;
  2. +----+----+-----+-----+-----+------+
  3. | id | rq | hsl | cjl | zdf | cjje |
  4. +----+----+-----+-----+-----+------+
  5. |  1 |  1 |   1 |   1 |   1 |    1 |
  6. |  2 |  2 |   2 |   2 |   2 |    2 |
  7. |  3 |  3 |   3 |   3 |   3 |    3 |
  8. |  4 |  4 |   4 |   4 |   4 |    4 |
  9. |  5 |  5 |   5 |   5 |   5 |    5 |
  10. |  6 |  6 |   6 |   6 |   6 |    6 |
  11. |  7 |  7 |   7 |   7 |   7 |    7 |
  12. |  8 |  8 |   8 |   8 |   8 |    8 |
  13. |  9 |  9 |   9 |   9 |   9 |    9 |
  14. | 10 | 10 |  10 |  10 |  10 |   10 |
  15. | 11 | 11 |  11 |  11 |  11 |   11 |
  16. | 12 | 12 |  12 |  12 |  12 |   12 |
  17. | 13 | 13 |  13 |  13 |  13 |   13 |
  18. | 14 | 14 |  14 |  14 |  14 |   14 |
  19. | 15 | 15 |  15 |  15 |  15 |   15 |
  20. | 16 | 16 |  16 |  16 |  16 |   16 |
  21. | 17 | 17 |  17 |  17 |  17 |   17 |
  22. | 18 | 18 |  18 |  18 |  18 |   18 |
  23. | 19 | 19 |  19 |  19 |  19 |   19 |
  24. | 20 | 20 |  20 |  20 |  20 |   20 |
  25. +----+----+-----+-----+-----+------+
  26. 20 rows in set

  27. mysql> set @x_sum_zs=(SELECT id from test4 order by rq desc limit 1)+1;
  28. set @x_sum_px=@x_sum_zs;

  29. select
  30.         id,
  31.         @x_sum_px:=(@x_sum_px-1) as sum_px,
  32.         (SELECT SUM(hsl) from test4 where id between @x_sum_px and @x_sum_zs ) as hsl_sum ,
  33.         (SELECT SUM(cjl) from test4 where id between @x_sum_px and @x_sum_zs ) as cjl_sum ,
  34.         (SELECT SUM(zdf) from test4 where id between @x_sum_px and @x_sum_zs ) as zdf_sum ,
  35.         (SELECT SUM(cjje) from test4 where id between @x_sum_px and @x_sum_zs ) as cjje_sum
  36. from test4 order by id desc limit 370;

  37. Query OK, 0 rows affected

  38. Query OK, 0 rows affected

  39. +----+--------+---------+---------+---------+----------+
  40. | id | sum_px | hsl_sum | cjl_sum | zdf_sum | cjje_sum |
  41. +----+--------+---------+---------+---------+----------+
  42. | 20 |     20 | 20      | 20      | 20      | 20       |
  43. | 19 |     19 | 39      | 39      | 39      | 39       |
  44. | 18 |     18 | 57      | 57      | 57      | 57       |
  45. | 17 |     17 | 74      | 74      | 74      | 74       |
  46. | 16 |     16 | 90      | 90      | 90      | 90       |
  47. | 15 |     15 | 105     | 105     | 105     | 105      |
  48. | 14 |     14 | 119     | 119     | 119     | 119      |
  49. | 13 |     13 | 132     | 132     | 132     | 132      |
  50. | 12 |     12 | 144     | 144     | 144     | 144      |
  51. | 11 |     11 | 155     | 155     | 155     | 155      |
  52. | 10 |     10 | 165     | 165     | 165     | 165      |
  53. |  9 |      9 | 174     | 174     | 174     | 174      |
  54. |  8 |      8 | 182     | 182     | 182     | 182      |
  55. |  7 |      7 | 189     | 189     | 189     | 189      |
  56. |  6 |      6 | 195     | 195     | 195     | 195      |
  57. |  5 |      5 | 200     | 200     | 200     | 200      |
  58. |  4 |      4 | 204     | 204     | 204     | 204      |
  59. |  3 |      3 | 207     | 207     | 207     | 207      |
  60. |  2 |      2 | 209     | 209     | 209     | 209      |
  61. |  1 |      1 | 210     | 210     | 210     | 210      |
  62. +----+--------+---------+---------+---------+----------+
  63. 20 rows in set

  64. mysql> set @x_sum_zs=(SELECT id from test4 order by rq desc limit 1)+1;
  65. set @x_sum_px=@x_sum_zs;
  66. set @hsl_sum  := 0;
  67. set @cjl_sum  := 0;
  68. set @zdf_sum  := 0;
  69. set @cjje_sum := 0;

  70. select
  71.         id,
  72.         @x_sum_px:=(@x_sum_px-1) as sum_px,
  73.         @hsl_sum := @hsl_sum + hsl as hsl_sum,
  74.         @cjl_sum := @cjl_sum + cjl as cjl_sum,
  75.         @zdf_sum := @zdf_sum + zdf as zdf_sum,
  76.         @cjje_sum := @cjje_sum + cjje as cjje_sum
  77. from test4 order by id desc;

  78. Query OK, 0 rows affected

  79. Query OK, 0 rows affected

  80. Query OK, 0 rows affected

  81. Query OK, 0 rows affected

  82. Query OK, 0 rows affected

  83. Query OK, 0 rows affected

  84. +----+--------+---------+---------+---------+----------+
  85. | id | sum_px | hsl_sum | cjl_sum | zdf_sum | cjje_sum |
  86. +----+--------+---------+---------+---------+----------+
  87. | 20 |     20 |      20 |      20 |      20 |       20 |
  88. | 19 |     19 |      39 |      39 |      39 |       39 |
  89. | 18 |     18 |      57 |      57 |      57 |       57 |
  90. | 17 |     17 |      74 |      74 |      74 |       74 |
  91. | 16 |     16 |      90 |      90 |      90 |       90 |
  92. | 15 |     15 |     105 |     105 |     105 |      105 |
  93. | 14 |     14 |     119 |     119 |     119 |      119 |
  94. | 13 |     13 |     132 |     132 |     132 |      132 |
  95. | 12 |     12 |     144 |     144 |     144 |      144 |
  96. | 11 |     11 |     155 |     155 |     155 |      155 |
  97. | 10 |     10 |     165 |     165 |     165 |      165 |
  98. |  9 |      9 |     174 |     174 |     174 |      174 |
  99. |  8 |      8 |     182 |     182 |     182 |      182 |
  100. |  7 |      7 |     189 |     189 |     189 |      189 |
  101. |  6 |      6 |     195 |     195 |     195 |      195 |
  102. |  5 |      5 |     200 |     200 |     200 |      200 |
  103. |  4 |      4 |     204 |     204 |     204 |      204 |
  104. |  3 |      3 |     207 |     207 |     207 |      207 |
  105. |  2 |      2 |     209 |     209 |     209 |      209 |
  106. |  1 |      1 |     210 |     210 |     210 |      210 |
  107. +----+--------+---------+---------+---------+----------+
  108. 20 rows in set

  109. mysql>
复制代码

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
4 [报告]
发表于 2016-01-15 10:51 |只看该作者
哇,今天发出来了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP