繁体   English   中英

这是一个效率低下的查询吗?

[英]Is this an inefficient query?

假设table1和table2都有大量的行(即几十万),以下是一个低效的查询?

编辑:按字段添加顺序。

SELECT * FROM (
  SELECT title, updated FROM table1
  UNION
  SELECT title, updated FROM table2
) AS query
ORDER BY updated DESC
LIMIT 25

这应该更快 - 但后来我看到没有ORDER BY那么你真正想要的25条记录是什么?

SELECT * FROM (
  SELECT title FROM table1 LIMIT 25
  UNION
  SELECT title FROM table2 LIMIT 25
) AS query
LIMIT 25

如果你绝对需要不同的结果,另一种可能性是使用union allgroup by子句:

SELECT title FROM (
  SELECT title FROM table1 group by title
  UNION ALL
  SELECT title FROM table2 group by title
) AS query
group by title
LIMIT 25;

在两个表中的索引ID列上没有limit子句的测试,在测试数据库中每个约920K行(在$work ),导致上面的查询超过一秒,通过union大约17秒。

UNION必须额外传递以获取distinct记录,因此您应该使用UNION ALL

是的,在内部查询中使用order by和limits。

SELECT * FROM (
  (SELECT title FROM table1 ORDER BY title ASC LIMIT C)
  UNION
  (SELECT title FROM table2 ORDER BY title ASC LIMIT C)
) AS query
LIMIT 25

这只会通过C行而不是N(数十万)。 ORDER BY是必需的,应该在索引列上。

C是一个启发式常量,应该根据域进行调整。 如果你只想要几个重复,C = 50-100可能没问题。

您也可以使用EXPLAIN自行查找。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM