美文网首页
2个奇怪的SQL问题

2个奇怪的SQL问题

作者: 多关心老人 | 来源:发表于2019-06-07 22:51 被阅读0次

奇怪的SQL问题1

业务上有一个需求:查询一个仓库是否有业务数据?一个仓库里有产品或者各种单据上用到了这个仓库,就说明这个仓库有业务数据,用户不能删除。

项目里采用的是实时查询,因为单据的数据量会越来越大,单据种类有多种,如销售单、采购单等。如果直接select 仓库id from 单据 where 仓库id in (1, 2,3)这种的话会查询这种单据的符合条件的所有记录,其实我只需要在这种单据里找到含有这个仓库的一条记录就行了,没必要找所有记录。于是就有了下面这个sql:

select 仓库id 
from dual
where exists(
  select 1
  from sales_order where `仓库id` = 仓库id
) or exists(
  select 1
  from purchase_order where `仓库id` = 仓库id
)
union all
select 仓库id2
from dual
where exists(
  select 1
  from sales_order where `仓库id` = 仓库id2
) or exists(
  select 1
  from purchase_order where `仓库id` = 仓库id2
)
union all
select 仓库id3
from dual
where exists(
  select 1
  from sales_order where `仓库id` = 仓库id3
) or exists(
  select 1
  from purchase_order where `仓库id` = 仓库id3
)

exists 只要找到一条满足条件的记录就返回, 如果第一个exists满足,那么后面的exists就短路了,按理说这种sql写法应该性能很高,但是执行结果显示性能很低。
换成如下:

select 仓库id
from sales_order
where `仓库id` in (仓库id, 仓库id2, 仓库id3)
union
select `仓库id` 
from purchase_order
where `仓库id` in (仓库id, 仓库id2, 仓库id3)

这种写法扫描表里所有满足条件的记录并且union 去重,性能竟然是上面写法的10倍。


奇怪的SQL问题 2

项目里用到了复杂的sql分页查询,这个sql多表关联,并且有子查询,sql嵌套了3层, 在对最后的结果集进行order by排序的时候,发现竟然不是稳定排序,在业务上就会造成用户困扰,用户在第一页看到这条数据,翻到第二页的时候,发现还有这条数据。 解决方法就是再对id进行排序。

相关文章

  • 2个奇怪的SQL问题

    奇怪的SQL问题1 业务上有一个需求:查询一个仓库是否有业务数据?一个仓库里有产品或者各种单据上用到了这个仓库,就...

  • SQL编程时遇到的奇怪问题

    运行后得到 想知道为什么 SIN(RADIANS(140)) 得到的结果是0.9093。这里140指的不是数字14...

  • ORA-00933: SQL 命令未正确结束

    初用BeetlSQL遇到很多奇怪的问题比如ORA-00933: SQL 命令未正确结束。经过研究发现,问题一共下面...

  • 跟pagehelper源码

    前几天帮实习生做了一个优化需求,遇到了一个很奇怪的问题:sql在sql平台执行,优化前30s+,优化后不到1秒,到...

  • 第十三篇:SpringBoot 2.x整合Mybatis以及通用

    今天听说在SpringBoot整合mybatis和通用mapper的时候会产生一个奇怪的问题,即执行sql语句的时...

  • 奇怪的问题

    问题一 今天地理课上学了极昼和极夜,写地理作业时有了个疑问:南极或北极极昼极夜时 1)极昼会不会24小时上课? ...

  • 奇怪的问题

    突然发现,很多之前的文章背锁定了,只能自己查看。很奇怪锁定的逻辑是什么。 现在的平台,为了避规监管,又舍不得人员的...

  • 奇怪的问题

    我是谁?我在哪? 哈哈! 脑子里突然蹦出来这几个问题。我想起小时候,路过家属区里的篮球场,我走在路牙子上,想的几个...

  • 奇怪的问题

    今天需要修改一个项目的bug,结果服务跑不起来,挺奇怪的,昨天还好好的,今天突然就不能运行了? 仔细看了一下报错的...

  • MySQL时区问题

    今天遇到一个很奇怪的问题,在代码里面通过MyBatis 能查询到今天的数据,但是将打印的SQL放到DataGrip...

网友评论

      本文标题:2个奇怪的SQL问题

      本文链接:https://www.haomeiwen.com/subject/bdtbxctx.html