在查看查询日志时,我看到一个没有解释的奇怪模式。
在几乎每个查询之后,我都有“从DUAL中选择1”。
我不知道这是从哪里来的,而且我当然没有明确地进行查询。
日志基本上如下所示:
10 Query SELECT some normal query
10 Query select 1 from DUAL
10 Query SELECT some normal query
10 Query select 1 from DUAL
10 Query SELECT some normal query
10 Query select 1 from DUAL
10 Query SELECT some normal query
10 Query select 1 from DUAL
10 Query SELECT some normal query
10 Query select 1 from DUAL
...etc...
有人遇到过这个问题吗?
MySQL版本:5.0.51
驱动程序:使用JDBC的Java 6应用程序。mysql-connector-java-5.1.6-bin.jar
连接池:commons-dbcp 1.2.2
validationQuery设置为“从DUAL中选择1”(很明显),并且当验证查询为非null时,显然连接池默认将testOnBorrow和testOnReturn设置为true。
这给我带来的另一个问题是我是否真的 需要
验证查询,或者是否可以通过禁用它或至少减少使用它的频率来提高性能。不幸的是,写我们的“数据库管理器”的开发人员已经不在我们身边,所以我不能要求他为我辩解。任何输入将不胜感激。我将在API和Google上进行一会儿挖掘,如果发现有任何价值,请向我报告。
编辑:添加了更多信息
EDIT2:添加了正确答案中要求的信息,以便以后找到它的任何人
它可能来自您的应用程序正在使用的连接池。我们使用一个简单的查询来测试连接。
只是快速浏览了mysql-connector-j的源代码,它并不是从那里来的。
最可能的原因是连接池。
通用连接池:
commons-dbcp
具有配置属性validationQuery
,该属性与结合使用testOnBorrow
并testOnReturn
可能导致您看到的语句。
C3P0
有preferredTestQuery
,testConnectionOnCheckin
,testConnectionOnCheckout
和idleConnectionTestPeriod
对于什么值,我倾向于配置连接测试和签出/借用,即使这意味着额外的网络闲聊也是如此。
问题内容: MySQL语句中是否可以通过> = NOW()-1排序记录(通过日期戳),以便选择从今天到今天的所有记录? 问题答案: 从日期/时间函数的文档来看,您应该能够执行以下操作:
问题内容: 我已经看到了许多有关以下内容的查询。 这意味着什么,它将如何执行,返回什么? 另外,在哪种类型的方案中可以使用此方案? 问题答案: 表示“从表中返回1”。它本身并不十分引人注目,因此通常将与它一起使用并经常使用(如@gbn所述,这不一定是最佳实践,但是,即使它没有真正的意义,也足以引起人们的注意(也就是说,我会使用它,因为其他人会立即使用它,并且它“立即变得更明显”。当然,这可能是粘性
问题内容: 我正在尝试从以下查询中获取行数。我只得到行计数为1,但有35条记录。您能否让我知道如何从内部查询中获取计数? 谢谢 问题答案: 您缺少FROM,需要为子查询指定别名。
我有一个问题...在表1中,我有一个id,我必须比较表2中的id,然后获取表2中的第二个id,并将其与表3进行比较,得到一个数据作为结果。例子 如果我查找id 1,结果必须是Sea。如果我查找id 2,结果必须是Hello。 谢谢!
我正在尝试从一个select表单中获取一个时间值。我在代码中看不到任何错误,尝试更改所有类名和变量,但值仍然没有被get select。(提交表单后我看不到所选的值) 代码添加如下:
问题内容: 我有一张表,列出已安装的软件的版本: 我想显示每个记录中所有记录的所有字段,但仅显示最高版本(版本也是)。 问题答案: 您没有指定要如何处理关系,但是如果要显示重复项,将这样做。 要使用进行测试的SQLfiddle。 如果您要消除重复项,并且如果存在重复项,请选择最新的重复项,则必须对查询进行某种程度的扩展; 另一个SQLfiddle。