在where子句中的多列中,有一列没有索引——Nuo数据库



请考虑由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包含为索引列?

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

那么,如果表中有7000000条记录,并且其中90%与column_2=匹配?column_3=?。那么这将非常重要。如果只有7条记录与column_2和column_3相匹配,那么这无关紧要。

对查询运行EXPLAIN,看看优化器的计划是什么。这个页面将帮助您解释结果。

最新更新