MySQL ORDER BY终止我的SQL查询

MySQL ORDER BY终止我的SQL查询,mysql,sql,group-by,Mysql,Sql,Group By,我有多个关于tube视频信息的表格。我需要连接这三个表并获取所需的列,然后根据最新的unix时间戳对它们进行排序。视频栏目有120万条记录,视频数据有800多万条记录,而tube只有22条记录 此查询在没有按部分排序的情况下运行良好: 从中选择vd.video\u id、vd.tube\u id、v.*、t.tube\u标题、t.tube\u域 视频数据vd连接视频v ON vd.video\U id=v.video\U id连接管t ON vd管内径=t管内径限值100 上述查询耗时0.000

我有多个关于tube视频信息的表格。我需要连接这三个表并获取所需的列,然后根据最新的unix时间戳对它们进行排序。视频栏目有120万条记录,视频数据有800多万条记录,而tube只有22条记录

此查询在没有按部分排序的情况下运行良好:

从中选择vd.video\u id、vd.tube\u id、v.*、t.tube\u标题、t.tube\u域 视频数据vd连接视频v ON vd.video\U id=v.video\U id连接管t ON vd管内径=t管内径限值100

上述查询耗时0.0002秒

但是,只要我想按时间戳排序,如果服务器没有先重置,则运行需要4-5分钟

从中选择vd.video\u id、vd.tube\u id、v.*、t.tube\u标题、t.tube\u域 视频数据vd连接视频v ON vd.video\U id=v.video\U id连接管t ON vd.tube\U id=t.tube\U id订单按v.date\U时间戳描述限制100

上述查询耗时272.9157秒

我在v.date_timestamp字段中添加了一个索引,看看这是否有帮助,但显然没有。也许在那个列上加个索引是毫无意义的?任何帮助都会很好,我对SQL还是相当陌生…

试着运行EXPLAIN SELECT…,看看MySQL是怎么说的:

也许,正如你所猜测的那样,由于某种原因没有使用索引


也许也有帮助?

不是肯定的,但我相信问题可能是,虽然你有一个关于video.date\u时间戳的索引,但你的查询必须首先命中每个video\u数据条目才能加入视频


通过如下反规范化,您应该可以看到巨大的加速:将date_timestamp字段复制到video_数据表中,并对其进行索引/排序,而不是在video中对其进行索引/排序。

首先,我相信,如果使用DESC,您的索引是无用的-至少我见过这样的语句

不管怎样,你可以考虑这样做:

选择。。。从选择video_id,从video_数据顺序中选择tube_id,按时间戳限制100作为vd内部连接


也许会更快。关键是限制100:

重新进行连接,以便最小的表排在第一位-这是一个好习惯

SELECT vd.video_id, vd.tube_id, v.*, t.tube_title, t.tube_domain 
FROM tube t
INNER JOIN video_data vd
  ON vd.tube_id = t.tube_id
INNER JOIN video v
  ON v.video_id = vd.video_id
 ORDER BY v.date_timestamp DESC LIMIT 100
我打赌这会有帮助,因为视频数据在22条管道记录进入之前不会加载,所以整体结果集会小得多。
此外,如果您想要显示内部连接,则最好显示内部连接。

请尝试选择。。。从视频数据加入视频v使用索引您的索引…我怀疑可能也是这样,我会尝试一下,看看会发生什么。这很好,查询耗时0.0002秒…现在运行速度与我的SQL一样快,完全没有ORDER BY。非常感谢。作为其他人的参考,我的最终SQL:选择不同的vd.video\u id、vd.tube\u id、vd.date\u时间戳、v.*、t.tube\u标题,视频中的t.tube\u域数据vd JOIN video v ON vd.video\u id=v.video\u id JOIN tube t ON vd.tube\u id=t.tube\u id按vd.date排序时间戳DESC LIMIT 100似乎不起作用…错误101网络::错误连接重置:连接重置。这是一个奇怪的错误,听起来更像是一个一般连接问题。您使用什么工具来测试您的查询?我经常使用ExecuteQuery,这很好。我使用phpmyadmin,也许我很快就会摆脱初学者的状态,开始探索其他工具。