2

MySql 查询优化器如何处理以下查询?

Select * from Eomlpyees e where e.department_id = 100 and e.name like '%%';

Select * from Eomlpyees e where e.department_id = 100;

第一个查询是一个休眠命名查询。我正在介绍另一个不需要使用“名称”过滤器的 API。

我应该通过传递空的“名称”过滤器还是添加第二个命名查询来使用第一个查询。

4

3 回答 3

2

在这两种情况下,将使用 department_id 上的索引。在第一个查询中,MySQL 将对结果集执行额外的扫描(在按部门 ID 过滤之后)以过滤记录是否与名称模式匹配。优化器可能会看到这匹配所有帖子并且不执行此扫描(按照建议检查说明),但这也可能是特定于版本的

于 2012-04-17T13:34:09.673 回答
1

首先,这两个查询是不等价的。第二个查询将显示null名称的值,但第一个查询不会显示null名称的值。

否则,第一个查询有两个要比较的字段,因此第二个查询需要更多时间。

于 2012-04-17T13:39:04.050 回答
1

您可以使用EXPLAIN.

在这里查看更多信息。

于 2012-04-17T13:29:23.857 回答