Answers:
统计信息只是动态元数据的一种形式,可帮助查询优化器做出更好的决策。例如,如果一个表中只有十几行,那么就没有必要去索引进行查找了。进行全表扫描始终会更好。但是,如果同一张表增长到一百万行,那么使用索引可能会更好。但是,如果您在只有很少的唯一值的列上查询该表(例如,它可能是仅包含“ M”或“ F”的“性”列),那么实际上FTS可能会比这种情况更好,因为您会无论如何都需要检索该块以构建结果集。现在说您的表是99%的“ M”,而只有1%的“ F”,我们应该在一种情况下使用FTS或在另一种情况下使用索引。相同的表,相同的查询,根据表的内容,可能有四个不同的查询计划。这些都是“统计信息”,它们对于每个数据库都是独立的-即使具有相同表和索引结构的两个数据库也将具有不同的统计信息。
总而言之,在现代数据库引擎中,有两种查询优化:重写SQL(基于规则的优化,就像编译器重写C以使其更高效),以及选择正确的数据路径(基于成本的优化) ,例如JIT编译器在运行时识别热点)。如果发现查询优化器明显做错了事情(例如,当您知道索引会更好时选择FTS),则只需担心这一点。