如果我在Linux机器上运行MySQL,如果连接到localhost运行查询比连接到解析到同一个框的域更快吗?这是来自Java使用JDBC.
thk*_*ala 12
直接使用localhost上任何接口的IP地址 - 环回接口(127.0.0.1)或任何其他接口 - 是具有绝对最佳性能的选项.数据包实际上将通过环回接口(无论实际使用哪个IP)进行路由 - 实际上 - CPU速度.
但是,有三个原因比其他接口的IP更喜欢127.0.0.1:
环回接口对于系统的操作至关重要,因此它在引导过程的早期初始化并几乎始终可用.
它不受外部因素的影响:虽然移除eth0电缆本身不会通过eth0的IP中断本地主机对自身的访问,但是如果你有任何很多"自动配置"系统会很快关闭链接上的接口,它将会搞砸失利.
如果你有防火墙设置,当涉及公共接口的IP时,很可能规则链更长(因此性能稍差).
如果您使用的是主机名,则localhost主机名通常会通过/ etc/hosts查找解析,这种查询非常快,尽管使用IP会直接删除此查找.根据您的设置,许多内容也会被缓存在内存中,以便以后几乎可以快速地执行.
如果使用公共主机名,则可能涉及DNS查询,这意味着增加了CPU使用率和网络延迟.在本地主机上使用缓存名称服务器将主要消除此问题.但请记住,如果您的DNS服务变得不稳定,可能仍然存在问题.
使用公共主机名的一个好处是,如果它类似于db.example.com.它允许您将数据库移动到单独的服务器,而无需更改客户端的配置.
由于您使用的是JDBC,我假设您正在为所有查询重用单个连接,在这种情况下,主机名解析开销本身在所有情况下都应该可以忽略不计,除非您必须处理损坏的DNS服务器.但是,为可能更高效的防火墙设置选择127.0.0.1地址可能仍有一些优点.