MySQL 查询需要优化

标签 mysql query-optimization

我有这个 users 表:

id : int (255)
name: char (100)
last_comment_target: int(100)
last_comment_date: datetime

这个表有大约 130 万行。

PKEYBTREEidlast_comment_targetlast_comment_date 上。

而且,我正在尝试执行范围查询:

SELECT * FROM users 
WHERE id IN (1,2,3,5,...[around 5000 ids]) 
AND last_comment_target > 0 
ORDER BY last_comment_dt DESC LIMIT 0,20;

有时查询可能需要长达 3 秒的时间。我想知道是否有更好的方法来优化这个查询。或者,如果可以重写此查询。

非常感谢您的帮助。

最佳答案

SELECT u.* 
FROM 
    users u
    JOIN (
        SELECT 1 id 
        UNION ALL
        SELECT 2 id
        UNION ALL
        :
        :
        SELECT 5000 id
    ) ids ON ids.id = u.id
WHERE 
    last_comment_target > 0 
ORDER BY 
    last_comment_dt DESC 
LIMIT 0, 20;

关于MySQL 查询需要优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7126482/

相关文章:

mysql - 如何指示MySQL不将表缓存在内存中?

sql - 使用 NOT EXISTS 重写查询的指导

javascript - MongoDB - 多个查询和单个文档结果

mysql - 平均维修间隔时间(按单位)

php - 如何在 codeigniter sql 查询中编写 TIMESTAMPDIFF?

mysql - 处理级联删除: Are there ways to do this automatically in mySQL

mysql - 将旧 MySQL 数据库中的数据恢复到新的 Mac OSX 中

mysql - 添加一个列来计算另一个表中的行

mysql - 使用 IN 子句和子查询进行极端查询优化

mysql - 用于从两个连接表获取数据的优化 SQL(来自两个表的 user-from-id 和 user-to-id 消息的用户名)