3

私は通常、tomcat jdbcプールからの優先検証クエリとして使用します。これは、結果1SELECT 1が非常に高速な1行のみを返すためですが、今日、1つのひどい間違いを見つけました。

私のデータベースには、主キーを持つテーブルが1つしかないため、null許容型ではありません。このテーブルは時々削除され、アプリケーションの状況によって再び表示されます。そして、それが問題です。データベースへの接続を検証します。データベースはすでに稼働していますが、テーブルが欠落しているため、ひどい例外が発生します。SELECT 1

したがって、ソリューションは、データベースに存在する唯一のテーブルに対して1つの検証クエリを見つけることで合格します。また、アプリケーションのパフォーマンスが主要な目的の1つであるため、クエリをできるだけ高速にする必要があります。

明白なクエリよりも答えることができますが、このクエリはテーブルの行ごとに1SELECT 1 FROM THE_TABLEを返すため、それほど速くはありません。

では、このテーブルへのより高速な検証クエリは何でしょうか?

編集

少なくとも1つの結果を返す必要がある場合、validation-queryはどのようにすべきですか?
commons-dbcpなどの一部のプール実装は、検証済みのクエリとして結果のないクエリを受け入れないため、これを尋ねます。

4

1 に答える 1

4

これはどうでしょうか0。実際の列ではなく行をプルすることで実際にデータをロードせずにテーブルが存在することを検証する必要があります。

SELECT TOP 0 1 FROM THE_TABLE

デモ:http ://www.sqlfiddle.com/#!3 / c670b / 3


SQLSERVERにオブジェクトが存在するかどうかを確認する組み込みの方法もあります。これは、効果的に同じことを行う2つの例です。

select count(1) from information_schema.tables where table_name = 'THE_TABLE'
select OBJECT_ID('THE_TABLE') is not null
于 2012-05-22T19:20:30.947 に答える