2016-07-29 6 views
0

私の変数は、次のように設定されています。MySqlの変数を設定して、クエリ中にリセットされないようにするにはどうすればよいですか?

SET @start_date = '2015-07-20'; 
SET @end_date = '2016-06-30'; 

私のクエリは次のようになります。

SELECT a.user_id, a.school_id, COUNT(a.log_id) logs 
FROM table1 a 
JOIN tbl2 b ON a.log_id = b.log_id 
JOIN users u ON a.user_id = u.user_id 
WHERE DATE(log_date) BETWEEN @start_date AND @end_date 
AND b.column2 = 123 
GROUP BY a.user_id, b.school_id; 

表1と表2は、両方とも非常に非常に大きなテーブルなので、クエリが実行するのに非常に長い時間がかかりますそれは私の目的のために大丈夫です。問題は、私の変数が何らかの形でクエリ中にリセットされるため、結果が空に戻ってしまうことです。私の質問は、彼らはクエリ中にタイムアウトしないように変数を設定する方法はありますか?

本当にありがとうございます。

+1

セッション変数が自分自身をリセットしない、彼らは接続の寿命のために持続する必要がありますあなたはあなたの大きなテーブルを結合するとき「WHERE」を使用するのではなく「AND」。 – Uueerdo

+0

変数を使用する代わりに実際の日付を差し込んでテストした結果、結果が返されました。そのため、クエリ中に変数に何かが起こっています。クエリが空のセットを返した後にSELECT @start_dateを実行しようとすると、NULLを返します。 – user6655061

+2

これは通常、接続がリセットされていることを示します。変数に代入しない通常のSELECTは、その値に影響してはいけません。どのようにセットとクエリを実行していますか? – Uueerdo

答えて

0

これは奇妙な問題です。 クエリーを最適化して実行すると、問題が解決する場合があります。

SELECT a.user_id, a.school_id, COUNT(a.log_id) logs FROM table1 a JOIN tbl2 b ON a.log_id = b.log_id JOIN users u ON a.user_id = u.user_id AND DATE(log_date) BETWEEN @start_date AND @end_date AND b.column2 = 123 GROUP BY a.user_id, b.school_id; 
+0

ありがとうございますが、テーブルがとても大きいので、これは私のためには機能しませんでした... – user6655061

関連する問題