包含索引扫描和非索引扫描过滤器的查询

您可能会感觉组合了 etx 索引扫描和 WHERE 子句中指定的过滤器的查询速度非常慢。例如,您可能期望以下查询能快速运行,因为 WHERE 子句过滤了任何标识不为 18 的行:
SELECT COUNT(*) FROM recipes
    WHERE etx_contains ( ingredients, 'eggs') and id = 18;
The preceding query, however, runs about as fast as the following query:
SELECT COUNT(*) FROM recipes
    WHERE etx_contains ( ingredients, 'eggs');

如果查询包括一个 etx_contains 扫描,那么它将在应用任何其他过滤器之前完成该扫描。当您执行包含 etx_contains 扫描的查询时,请记住执行查询所需的时间首先受到索引中找到的行数的影响,其次受到 SQL 语句中找到的行数的影响。

在上述每种情况下,执行查询所需的时间都与包含词 eggs 的食谱数量成比例 — 即使食谱 18 没有使用鸡蛋。