java吧 关注:1,215,895贴子:12,663,594

有个sql上的问题想请教一下

只看楼主收藏回复

小弟刚入职一家公司,看到他们有个sql是这样写的
select * from xxx where id in (select id from xxx where …….)order by id desc limit ….
这种写法会提高效率吗?
和直接select * from xxx where ….. order by id desc limit …. 相比会有提升吗?
我连到数据库试了下发现直接查询效率反而会更高,但这个sql明显是刻意这么写的。
有没有大佬来指点下,用子查询先查出id再用ID去查数据和直接查数据有什么区别。


IP属地:上海来自iPhone客户端1楼2022-07-11 19:09回复
    自己顶一下,求大佬看看


    IP属地:上海来自iPhone客户端2楼2022-07-11 19:12
    回复
      不用子查询 你的id怎么过滤


      IP属地:广东来自iPhone客户端4楼2022-07-11 19:42
      收起回复
        这种一般是用在大表分页上吧,我记得id自增才行,要不然数据是乱的


        IP属地:北京5楼2022-07-11 20:14
        回复
          有可能是这个人太菜了


          IP属地:四川来自Android客户端6楼2022-07-11 21:48
          回复
            我不理解为什么用第一种写法


            IP属地:浙江来自iPhone客户端7楼2022-07-11 22:10
            收起回复
              有些场景确实是需要第一种写法的


              IP属地:河南来自Android客户端8楼2022-07-11 22:15
              回复
                用in的默认为鸡


                IP属地:云南来自Android客户端9楼2022-07-11 22:20
                收起回复
                  能不能把完整的发出来


                  IP属地:江苏来自Android客户端10楼2022-07-11 22:23
                  回复
                    用第二种方式好


                    IP属地:广东来自Android客户端12楼2022-07-11 22:32
                    收起回复
                      优化加薪步步高


                      IP属地:广东来自Android客户端13楼2022-07-11 22:39
                      回复
                        以前有个教程教你做SQL优化,其中一段就是说如何优化order by,里面提到过这种写法。不过呢,这也是需要一定条件才能用的,用的时候最好用explain看一下执行计划,不要泥古不化


                        IP属地:河北来自iPhone客户端14楼2022-07-11 22:42
                        回复
                          百度:减小mysql回表操作。


                          IP属地:四川来自Android客户端15楼2022-07-11 22:45
                          收起回复
                            能join不要in


                            IP属地:江苏来自Android客户端16楼2022-07-11 22:57
                            回复
                              这个是大数据量的分页优化,可以减少回表次数,至于in的问题,你都用了主键索引,还担心in的性能?


                              IP属地:四川来自Android客户端18楼2022-07-11 23:21
                              回复