0%

背景

    windows服务器中,通过窗口启动jar包,每个窗口对应一个临时会话。当关闭CMD窗口时,启动的Java程序会立即终止,无法实现长期运行。

    将 JAR 包注册为 Windows 服务,可随系统启动自动运行,支持服务管理(启动 / 停止 / 重启)。

阅读全文 »

环境要求

在Linux环境中安装MariaDB 11.8.3版本,因为此版本较新,CentOS7系统版本过低,无法支持,因此采用Rocky Linux 9系统。

阅读全文 »

多表查询优化

驱动表理论

  1. 外连接

    左外连接:一般来说:坐表为驱动表,右表为被驱动表

  2. 内连接

    对于内连接来讲,如果表的连接条件中只能有一个字段有索引,则有索引的字段所在表会被作为被驱动表出现

    对于内连接来讲,在两个表的连接条件都存在索引的情况下,会选择小表作为驱动表。以小表驱动大表

阅读全文 »

EXISTS 和 IN 的区分

问题

    不太理解哪种情况应该使用EXISTS,哪种情况应该使用IN。选择的标准是看能否使用表的索引吗?

回答

    索引是个前提,其实选择与否还是要看表的大小。你可以将选择的标准理解为小表驱动大表。在这种方式下的效率是最高的。

    比如下面这样:

1
2
3
select * from A where cc IN (select cc from B)

select * from A where EXISTS (select cc from B where B.cc = A.cc)

当A小于B时,用EXISTS。因为EXISTS的实现,相当于外表循环,实现的逻辑类似于:

1
2
3
for i in A
for j in B
if j.cc == i.cc then ...

当B小于A时用IN,因为实现的逻辑类似于:

1
2
3
for i in B
for j in A
if j.cc == i.cc then ...

哪个表小就用哪个表来驱动,A表小就用EXISTS,B表小就用IN。

  • in是把外表和内表作hash连接

  • 而exists是对外表作loop循环,每次loop循环再对内表进行查询,关联子查询

小结

  1. 如果查询的两张表大小相当,那么用in和exists差别不大;

  2. 如果两个表中一个较小一个较大,则子查询表大(内表大)的用exists

  3. 如果两个表中一个较小一个较大,自查询表小(内表小)的用in

阅读全文 »

在进行MySQL的优化之前,必须要了解的就是MySQL的查询过程,很多查询优化工作实际上就是遵循一些原则,让MySQL的优化器能够按照预想的合理方式运行而已。

                                                                    图-MySQL查询过程

阅读全文 »