1

まず、確かに、私は DBA ではありません...だから私の SQL-fu は弱いです。

私は最近、10回の内部結合を行うかなり多額のレポートを持つプロジェクトに取り組んでいました。SQL Studio 管理クライアントを使用して製品データ (SQL Server 2005) に対して実行した場合、クエリはバーンバーナーではありませんでしたが、20 秒弱で返されました。しかし、春を駆け抜けると31分。

そのため、DBA 忍者に依頼したところ、JDBC メソッドでは変数をパラメーターとして渡す準備済みステートメントを使用するため、クエリ プランが異なると指摘されましたが、クライアントでは変数がハードコーディングされていました。それで、彼はクエリを作り直しました。

結果のクエリは、いくつかの宣言変数を一番上に設定し、それらを使用してローカル一時テーブルを作成し、最終的なレポート クエリの一部としてローカル一時テーブルを使用します。彼は、これらすべてを同じクエリ文字列 (複合クエリ????) の一部として送信できるはずだと言いました。次のようになります (罪のない人を保護するために難読化されています)。

declare @startdate DateTime
declare @enddate DateTime

set @startdate = DATEADD (dd, 0, DATEDIFF (dd, 0, '2013-03-01 00:00:00.000'))
set @enddate = DATEADD (dd, 1, DATEDIFF (dd, 0, '2013-08-08 00:00:00.000'))

CREATE TABLE #LATEST_BLAH_ACTION
(
    FK_Blah_Timestamp DATETIME, 
    FK_Blah_Id VARCHAR(10), 
    Blah_Other_Thing VARCHAR(10),
    [Latest Updated Date/Time] DATETIME  
)
INSERT INTO #LATEST_BLAH_ACTION
SELECT FK_Blah_Timestamp, FK_Blah_Id, Blah_Other_Thing,  
  MAX(Blah_Other_Timestamp) AS [Latest Updated Date/Time] 
FROM BlahTable                        
WHERE Blah_Another_Thing = 'Some value' AND 
  Blah_Other_Timestamp BETWEEN @startdate and @enddate
GROUP BY FK_Blah_Timestamp, FK_Blah_Id, Blah_Other_Thing

SELECT
   -- Bunch of fields
  From LATEST_BLAH_ACTION
  -- Bunch of crazy Inner Joins and such

しかし、それは機能していません。これを SQL Management Studio から実行すると、結果が返されます。SpringのSimpleJdbcTemplateを使用してJavaコードから実行すると、エラーはありませんが結果はありません。

Spring を使用してこのような (複合???) クエリを実行することは可能ですか? トランザクションの一部として、個別に行う必要がありますか? おそらくSimpleJdbcTemplate以外のものを使用しますか?

4

0 に答える 0