Mic*_*ker 8 mysql sql-execution-plan
我有一个问题
SELECT foo FROM bar WHERE some_column = ?
Run Code Online (Sandbox Code Playgroud)
我可以从MySQL获得解释计划而不填写参数值吗?
只要你只做一个等于(而不是一个可能有短路影响的东西),只需用一个值替换它:
EXPLAIN SELECT foo FROM bar WHERE some_column = 'foo';
Run Code Online (Sandbox Code Playgroud)
由于它实际上并不执行查询,因此结果不应与实际结果不同.在某些情况下,这是不正确的(我已经提到过LIKE).以下是不同情况的示例LIKE:
SELECT * FROM a WHERE a.foo LIKE ?
Run Code Online (Sandbox Code Playgroud)
Foo- 如果索引存在,可以使用索引扫描.%Foo- 即使存在索引,也需要全表扫描Foo%- 可以使用索引扫描,具体取决于索引的基数和其他因素如果您正在加入,并且where子句产生一个不可能的组合(因此它会短路).例如:
SELECT * FROM a JOIN b ON a.id = b.id WHERE a.id = ? AND b.id = ?
Run Code Online (Sandbox Code Playgroud)
如果第一个和第二个参数相同,则它有一个执行计划,如果它们不同,它将短路(并返回0行而不打任何数据)......
还有其他人,但这些都是我现在想到的最重要的......
| 归档时间: |
|
| 查看次数: |
1173 次 |
| 最近记录: |