背景
windows服务器中,通过窗口启动jar包,每个窗口对应一个临时会话。当关闭CMD窗口时,启动的Java程序会立即终止,无法实现长期运行。
将 JAR 包注册为 Windows 服务,可随系统启动自动运行,支持服务管理(启动 / 停止 / 重启)。
不太理解哪种情况应该使用EXISTS,哪种情况应该使用IN。选择的标准是看能否使用表的索引吗?
索引是个前提,其实选择与否还是要看表的大小。你可以将选择的标准理解为小表驱动大表。在这种方式下的效率是最高的。
比如下面这样:
1 | select * from A where cc IN (select cc from B) |
当A小于B时,用EXISTS。因为EXISTS的实现,相当于外表循环,实现的逻辑类似于:
1 | for i in A |
当B小于A时用IN,因为实现的逻辑类似于:
1 | for i in B |
哪个表小就用哪个表来驱动,A表小就用EXISTS,B表小就用IN。
in是把外表和内表作hash连接
而exists是对外表作loop循环,每次loop循环再对内表进行查询,关联子查询
如果查询的两张表大小相当,那么用in和exists差别不大;
如果两个表中一个较小一个较大,则子查询表大(内表大)的用exists;
如果两个表中一个较小一个较大,自查询表小(内表小)的用in。