【发布时间】:2021-02-24 09:15:31
【问题描述】:
我想优化一些 MySQL 查询。
我在我的应用程序中使用knex 来构建查询。使用toSQL(),我可以得到如下格式的SQL:
{
sql: 'SELECT * FROM Table WHERE id = ?',
bindings: [1]
}
我的问题是优化这些查询的最佳方法是什么?如果我将 sql 复制到命令行中,以便与EXPLAIN 一起使用,我需要一种绑定参数的方法。我怎样才能做到这一点?
或者,有没有比使用 MySQL shell 检查优化器的查询计划更好的工具?
编辑:我刚刚将查询复制到文本编辑器并手动提供所有参数绑定。
【问题讨论】:
-
使用
EXPLAIN,您需要存根您自己的值,或者您需要使用某种查询更改代码在您的应用程序中运行它,例如'EXPLAIN ' + query。 -
假设 id 是 PK,除了命名你真正想要返回的列之外,没有太大的优化空间。
-
是的,这不是我要优化的实际查询。真正的查询有一堆连接和子查询、排序函数等。这只是为了简单地说明问题。
-
如果你想优化它,你的 MySQL 查询才是最重要的,而不是你用来发送查询的 JS。这使得它不清楚。 Here's an answer I have to a similar question,以询问是否JOIN vs WHERE is better为例。希望这可以帮助。干杯。
-
是的,我可以确认您需要提供真实值才能使用 EXPLAIN。您可以选择代表应用工作负载的值。