mysql - 需要提高sql性能

标签 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

好的,我需要创建日期为昨天的总数据。对于每个 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 ))

提前致谢。

最佳答案

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

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

关于mysql - 需要提高sql性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16144479/

相关文章:

MySQL 查询获取最新记录

mysql - mysql使用group by和inner join时的错误行为

SQL 查询问题 : X has many Y. 获取所有 X 并仅获取每个 X 的最新 Y

mysql - 建议的存储股票价格的模式

mysql - 在日期中添加天数

Java存储过程: java. lang.NoSuchMethodError

python - Django 服务器未正确启动似乎是 mysql 问题。

php - 在 url 中传递变量以获取特定的 JSON 输出

sql - 将sqlite数据库转换为sdf文件

mysql - 如何按列显示结果?