MySql查询优化器如何处理以下查询?MySql数据库查询优化器和类似关键字
Select * from Eomlpyees e where e.department_id = 100 and e.name like '%%';
Select * from Eomlpyees e where e.department_id = 100;
第一个查询是一个hibernate命名查询。我正在引入另一个不需要使用'name'过滤器的API。
我应该使用第一个查询,通过传递空的“名称”过滤器或添加第二个命名查询。
2个查询不是严格等价的。像'%%'这样的e.name不会匹配具有'NULL'的'e.name'的行。 – 2012-04-17 13:32:12
有趣的是,如果没有雇员与空值? – 2012-04-17 13:35:34
无论如何,我会使用第二个版本 - 即使“e.name”有NOT NULL约束。为什么依靠优化器?这很聪明,但这个特殊的技巧可能不在智能工具集中。作为@aF。建议,你总是可以用'EXPLAIN'来检查你的版本的行为。 – 2012-04-17 13:38:51