需要提高sql性能

需要提高sql性能

问题描述:

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

除了检查表上的索引之外,最好不要使用相关的子查询,而是使用直接连接。

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