sql - 高效的 SQL 测试查询或验证查询将适用于所有(或大多数)数据库

标签 sql connection-pooling

许多数据库连接池库提供了测试其 SQL 连接是否空闲的功能。例如,JDBC 池库 c3p0有一个名为 preferredTestQuery 的属性,它按照配置的时间间隔在连接上执行。同样,Apache Commons DBCP 有 validationQuery .

很多example queries我见过 MySQL 的,建议使用 SELECT 1; 作为测试查询的值。但是,此查询不适用于某些数据库(例如 HSQLDB,SELECT 1 需要 FROM 子句)。

是否存在与数据库无关的查询,其效率相当,但适用于所有 SQL 数据库?

编辑:

如果没有(似乎是这种情况),有人可以建议一组适用于各种数据库提供程序的 SQL 查询吗?我的目的是以编程方式确定我可以根据我的数据库提供程序配置使用的语句。

最佳答案

经过一些研究以及此处一些答案的帮助:

选择 1

  • H2
  • MySQL
  • Microsoft SQL Server(根据 NimChimpsky)
  • PostgreSQL
  • SQLite
  • hive
<小时/>

从 DUAL 中选择 1

  • 甲骨文
<小时/>

从任何_现有_表中选择 1,其中 1=0

从 INFORMATION_SCHEMA.SYSTEM_USERS 中选择 1

立即调用()

  • HSQLDB(使用版本 1.8.0.10 进行测试)

    注意:我尝试在第二个查询上使用 WHERE 1=0 子句,但它无法用作 Apache Commons DBCP 的 validationQuery 的值,因为查询不返回任何行

<小时/>

VALUES 1从 SYSIBM.SYSDUMMY1 中选择 1

从 SYSIBM.SYSDUMMY1 选择 1

  • DB2

从系统表中选择计数(*)

  • Informix

关于sql - 高效的 SQL 测试查询或验证查询将适用于所有(或大多数)数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3668506/

相关文章:

mysql - mysql 连接池如何与 Node 微服务一起工作?

c# - 如何配置 WCF 来处理大量并发用户?

mysql - SQL - JOIN 更多表而不是 IN(子查询)

java - JDBC连接是如何实现的?

sql-server - TransactionScope 和连接池

java - 什么是最简单(即最不复杂)的 LDAP 操作

mysql - sql中更新语句中的算术

sql - 为什么 DNN 中 DAL2 存储库的默认 GetById() 执行缓慢?

sql - 考虑可扩展性时,为什么连接不好?

java - 不使用 Java EE 应用程序服务器创建连接池