Mysql 摆脱慢子查询

Mysql 摆脱慢子查询,mysql,sql,database-performance,Mysql,Sql,Database Performance,我有一个连接到服务器的数据库,目前有2300000行 我运行以下查询以查找用户的连接,如果nick/ip/client_id相同,则删除重复项 SELECT `nick`, INET_NTOA(`ip`) as `ip`, HEX(`client_id`) as `client_id`, UNIX_TIMESTAMP(`date`) as `date` FROM (SELECT * FROM `joins` ORDER BY `date` DESC) as

我有一个连接到服务器的数据库,目前有2300000行

我运行以下查询以查找用户的连接,如果nick/ip/client_id相同,则删除重复项

SELECT
    `nick`,
    INET_NTOA(`ip`) as `ip`,
    HEX(`client_id`) as `client_id`,
    UNIX_TIMESTAMP(`date`) as `date`
FROM
    (SELECT * FROM `joins` ORDER BY `date` DESC) as `sub`
WHERE
    `nick` LIKE '%nick%'
    -- Can also be things like this:
    --   `ip` & INET_ATON('255.255.0.0') = INET_ATON('123.123.0.0')
GROUP BY
    `nick`,
    `ip`,
    `client_id`
ORDER BY
    `date` DESC
LIMIT 500

为什么我首先要使用子查询?使用GROUP BY时获取最新日期值。

我认为您误解了ORDER BY和GROUP BY在该查询中的作用。为了获得每个nick、ip、client_id的最新日期,您需要编写如下查询:

SELECT `nick`, INET_NTOA(`ip`) as `ip`, HEX(`client_id`) as `client_id`, MAX(UNIX_TIMESTAMP(`date`)) as `date` FROM `joins` WHERE `nick` LIKE '%nick%' -- Can also be things like this: -- `ip` & INET_ATON('255.255.0.0') = INET_ATON('123.123.0.0') GROUP BY `nick`, `ip`, `client_id` ORDER BY `date` DESC LIMIT 500 根本不需要子查询。此代码对数据进行分组,然后返回

UNIX_TIMESTAMP(`date`)
截止日期。

谢谢!我现在觉得自己很笨-没问题,您所编写的内容足够合乎逻辑,只是SQL在这种情况下的工作方式不太一样。