在localhost而不是域中连接/使用MySQL是否更快(即使域解析为同一台计算机)?

时间:2010-12-05 01:31:04

标签: java mysql jdbc

如果我在Linux机器上运行MySQL,如果连接到localhost运行查询比连接到解析到同一个框的域更快吗?这是使用JDBC的Java。

3 个答案:

答案 0 :(得分:12)

直接使用localhost上任何接口的IP地址 - 环回接口(127.0.0.1)或任何其他接口 - 是具有绝对最佳性能的选项。数据包实际上将通过环回接口(无论实际使用哪个IP)进行路由 - 实际上 - CPU速度。

然而,有三个原因比其他接口的IP更喜欢127.0.0.1:

  • 环回接口对于系统的运行至关重要,因此它在启动过程中很早就被初始化,几乎总是可用。

  • 它不受外部因素的影响:删除eth0电缆本身不会通过eth0的IP中断localhost对自身的访问,如果你有任何一个,它搞砸了许多“自动配置”系统会在链路丢失时愉快地关闭接口。

  • 如果您设置了防火墙,那么当涉及公共接口的IP时,规则链很可能会更长(因此性能稍差)。

如果您使用的是主机名,则localhost主机名通常会通过非常快速的/ etc / hosts查找解析,尽管使用IP会直接删除此查找。根据您的设置,许多内容也会被缓存在内存中,以便以后几乎可以快速地进行。

如果使用公共主机名,则可能涉及DNS查询,这意味着增加了CPU使用率和网络延迟。在本地主机上使用缓存名称服务器将主要消除此问题。但请记住,如果您的DNS服务变得不稳定,可能仍会出现问题。

使用公共主机名的一个好处是,如果它类似于db.example.com。它允许您将数据库移动到单独的服务器,而无需更改客户端的配置。

由于您使用的是JDBC,我假设您正在为所有查询重用单个连接,在这种情况下,主机名解析开销本身在所有情况下都应该可以忽略不计,除非您必须处理损坏的DNS服务器。但是,为可能更有效的防火墙设置选择127.0.0.1地址可能仍有一些优点。

答案 1 :(得分:3)

localhost是一个可以解析为您的计算机的域名,因此我会说它完全一样快。

使用文件套接字可能会带来不同,但我不知道JDBC是否支持它。

答案 2 :(得分:1)

使用127.0.0.1甚至比localhost更快,因为它直接指向IP。