Java 在本地主机而不是域上连接/使用MySQL是否更快(即使域解析为同一台计算机)?
如果我在Linux机器上运行MySQL,那么如果连接到localhost,运行查询是否比连接到解析到同一机器的域更快?这是来自使用JDBC的Java。Java 在本地主机而不是域上连接/使用MySQL是否更快(即使域解析为同一台计算机)?,java,mysql,jdbc,Java,Mysql,Jdbc,如果我在Linux机器上运行MySQL,那么如果连接到localhost,运行查询是否比连接到解析到同一机器的域更快?这是来自使用JDBC的Java。localhost是一个解析到您的计算机的域,所以我想说它也一样快 使用文件套接字可能会带来不同,尽管我不知道JDBC是否支持它。直接使用本地主机上任何接口的IP地址(环回接口(127.0.0.1)或任何其他接口)是性能绝对最佳的选项。数据包将以实际CPU速度通过环回接口(无论实际使用的是哪个IP)进行路由 但是,与其他接口的IP相比,选择127.
localhost
是一个解析到您的计算机的域,所以我想说它也一样快
使用文件套接字可能会带来不同,尽管我不知道JDBC是否支持它。直接使用本地主机上任何接口的IP地址(环回接口(127.0.0.1)或任何其他接口)是性能绝对最佳的选项。数据包将以实际CPU速度通过环回接口(无论实际使用的是哪个IP)进行路由 但是,与其他接口的IP相比,选择127.0.0.1有三个原因:
- 环回接口对系统的操作至关重要,因此,它在引导过程中很早就被初始化,并且几乎总是可用的
- 它不受外部因素的影响:虽然移除eth0电缆本身不会中断本地主机通过eth0的IP对自身的访问,但如果您有许多“自动配置”系统中的任何一个会在链路丢失时愉快地关闭接口,那么它会把事情搞得一团糟
- 如果您有防火墙设置,当涉及公共接口的IP时,很可能规则链更长(因此性能稍差)
由于您使用的是JDBC,我假定您正在为所有查询重用单个连接,在这种情况下,主机名解析开销本身在所有情况下都应该可以忽略不计,除非您必须处理一个损坏的DNS服务器。不过,选择127.0.0.1地址可能还是有一些好处的,因为它可能会更高效地设置防火墙。使用
127.0.0.1
甚至比localhost
更快,因为它直接指向IP使用127.0.0.1则根本没有名称解析。我在运行mysql的mac服务器(10.8.5)上测试了这一点(5.6.16)机器IP比localhost和127.0.0.1都快20%。也许这些年来情况有所改变?@Jones:我想这取决于您的系统配置和应用程序的具体情况。除此之外,正如OP所提到的,这个答案主要是假设Linux系统,我可以想到几个可能的问题降低使用127.0.0.1
的速度。您需要分析您的基准测试,以了解发生了什么。