我有一个疑问
SELECT foo FROM bar WHERE some_column = ?
我可以从 MySQL 获取解释计划而不填写参数值吗?
只要您只执行 equals(而不是 like,这可能会产生短路影响),只需将其替换为一个值:
EXPLAIN SELECT foo FROM bar WHERE some_column = 'foo';
由于它实际上并未执行查询,因此结果不应与实际结果不同。在某些情况下,情况并非如此(我已经提到过 LIKE)。这是不同情况的示例LIKE
:
SELECT * FROM a WHERE a.foo LIKE ?
- 参数 1 ==
Foo
- 如果索引存在,则可以使用索引扫描。
- 参数 1 ==
%Foo
- 需要全表扫描,即使索引存在
- 参数 1 ==
Foo%
- 可以使用索引扫描,具体取决于索引的基数和其他因素
如果您要加入,并且 where 子句产生不可能的组合(因此它将短路)。例如:
SELECT * FROM a JOIN b ON a.id = b.id WHERE a.id = ? AND b.id = ?
如果第一个和第二个参数相同,则它有一个执行计划,如果它们不同,它将短路(并返回 0 行而不命中任何数据)...
还有其他的,但我现在能想到的就只有这些了……
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)