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。
我应该使用第一个查询,通过传递空的'name'过滤器或添加第二个命名查询。
答案 0 :(得分:2)
在这两种情况下,都将使用department_id上的索引。在第一个查询中,MySQL将对结果集执行附加扫描(在按department_id过滤之后),以便在记录与名称模式匹配时对其进行过滤。优化程序可能会看到此匹配所有帖子并且不执行此扫描(按建议检查说明),但这可能也是版本特定的
答案 1 :(得分:1)
您可以使用EXPLAIN
。
查看更多信息HERE。
答案 2 :(得分:1)
首先,两个查询都不相同。第二个查询将显示名称的null
值,但第一个查询不会显示名称的null
值。
否则,第一个查询有两个要比较的字段,因此第二个查询需要更多时间。