0

请考虑一个包含 7000 万条记录的 NuoDB 数据库中的表“TABLE”。还要考虑“TABLE”中存在的列是 column_1、column_2、column_3、column_4 和 column_5。在上述列中,column_1 是主键。并且 column_1、column_2 和 column_3 被索引。

现在我们需要执行以下模板的 SQL 查询:

select * from TABLE where column_2 = ? and column_3 = ? and column_4 = ?

我们可以看到 column_2 和 column_3 已经被索引,因此没有问题。但是 column_4 没有被索引。

它会有所作为吗?是否必须将 column_4 作为索引列包含在内?

4

1 回答 1

1

这不是强制性的。它会有所作为吗?这取决于您的数据。NuoDB 有一个不错的优化器,因此它会查看该查询并首先对 column_2 和 column_3 进行索引扫描。但是一旦它得到部分结果,它就必须为每个剩余的记录加载原子来处理谓词的最后一部分。

因此,如果表中有 70,000,000 条记录并且其中 90% 匹配 column_2=? 和column_3 =?。那么这将很重要。如果只有 7 条记录与 column_2 和 column_3 匹配,那么它不会有太大影响。

对查询运行 EXPLAIN 并查看优化器的计划。此页面将帮助您解释结果。

于 2020-04-22T02:19:56.497 回答