【发布时间】:2017-01-29 09:43:21
【问题描述】:
所以我有一个这样的查询:
SELECT tablea.name, tablea.views from tablea inner
join tableb on (tablea.id = tableb.id and tablea.balance > 0)
order by tablea.views asc limit 1
但是,问题是当我运行它时,它运行得很慢(4 秒以上)。 有趣的是,当删除“order by”子句时,在保持限制 1 的同时,它会在 0.005 秒(大约)内运行。
更有趣的是:当我不将它加入tableb时,即:
SELECT tablea.name, tablea.views from tablea
where tablea.balance > 0
order by tablea.views asc limit 1
查询通常在 0.005 秒内运行。
注意事项:
- tablea 中的列视图已编入索引
- tablea 和 tableb 在 id 方面具有 1 对 1 的关系,并且具有大致相同的行数。
为什么第一个查询、删除 'order by' 后的第一个查询和第二个查询之间的性能差异如此之大?
在连接两个表时,无论如何可以使排序更快吗?
【问题讨论】:
-
您可以在原始连接查询上运行
EXPLAIN吗?让我们看看那里实际发生了什么。 -
关于性能的问题总是需要所有相关表的 CREATE TABLE 语句以及 EXPLAIN 的结果
标签: php mysql indexing sql-order-by sql-limit