2013-04-22 93 views
1
Table temporary_search_table 
post_id,property_status, property_address,....more 30 field 

Table search_meta 
meta_id,search_id,status,created_date 

好吧我需要created_date是昨天的總數據。對於每個temporary_search_table數據,search_meta中可能會有多個條目。所以我們需要從search_meta中選擇最後一個字段,並檢查創建的日期是昨天,並且property_status正在等待。如果是,那麼我們可以計算這個數字。如果search_meta中沒有數據可用於temporary_search_table中的條目,那麼我們不需要在我們的結果中計算該行。需要提高sql性能

在這裏,我附上我的SQL數據。它的工作,但30000行需要很多時間。

SELECT COUNT(id) FROM temporary_search_table 
    WHERE property_status = 'pending' AND (1 = (SELECT DATEDIFF(NOW(), created_date) 
    FROM search_meta WHERE post_id = search_id ORDER BY created_date DESC LIMIT 0,1)) 

在此先感謝。

+0

這兩個表上是否有索引? – 2013-04-22 10:14:17

+0

對不起,可能是我不明白你的問題。你的意思是表temporary_search_table和search_meta之間的關係?如果「是」,那麼是的。 temporary_search_table中的post_id是serach_meta表中的外鍵(search_id)。 – 2013-04-22 10:17:26

+0

那麼,那裏有一個相關的子查詢。 – 2013-04-22 10:17:43

回答

0

除了檢查表上的索引之外,最好不要使用相關的子查詢,而是使用直接連接。

SELECT COUNT(id) 
FROM temporary_search_table 
INNER JOIN search_meta ON post_id = search_id 
WHERE property_status = 'pending' AND DATEDIFF(NOW(), created_date) = 1 
ORDER BY created_date DESC 
LIMIT 1 
+0

你可以發佈我的數據庫索引教程嗎? – 2013-04-22 10:25:53

+0

@MonirulIslam你先測試這個SQL嗎? – 2013-04-22 10:49:05

+0

是的,我測試過了。但似乎緩慢:( – 2013-04-22 10:51:17