需要提高sql性能

时间:2013-04-22 10:09:30

标签: mysql sql join

Table temporary_search_table
post_id,property_status, property_address,....more 30 field

Table search_meta
meta_id,search_id,status,created_date

好的我需要创建__ate是昨天的总数据。对于每个temporary_search_table数据,search_meta中可能有多个条目。所以我们需要从search_meta中选择最后一个字段,并检查创建的日期是昨天,而property_status是待处理的。如果是,那么我们可以计算数字。如果search_meta中没有可用于在temporary_search_table中输入的数据,那么我们不需要在结果中计算该行。

这里我附加了我的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 ))

提前致谢。

1 个答案:

答案 0 :(得分: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