2016-07-29 55 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

Session變量不重置自己,他們應該持續連接的壽命。 – Uueerdo

+0

我測試了插入實際日期而不是使用變量,並返回了結果,所以在查詢過程中變量發生了變化。如果我在查詢返回空集後嘗試運行SELECT @start_date,它將返回NULL。 – user6655061

+2

這通常表示您的連接正在重置;一個沒有分配給變量的普通'SELECT'不應該影響它們的值。你如何執行集合和查詢? – Uueerdo

回答

0

這是一個奇怪的問題。 如果您優化查詢以加快運行速度,則問題可能會得到解決。使用「和」,而不是「WHERE」當你加入你的大表:

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

相關問題