where子句中的多列中,有一列没有被索引 - Nuo Database
Among the multiple columns in where clause, one column is not indexed - Nuo Database
请考虑一个包含 7000 万条记录的 NuoDB 数据库中的 table "TABLE"。
还要考虑 "TABLE" 中存在的列是 column_1、columne_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 进行索引扫描。但是一旦它有了那个部分结果,它就必须为每个剩余的记录加载原子来处理谓词的最后部分。
那么,如果 table 中有 70,000,000 条记录并且其中 90% 匹配 column_2=?和 column_3=?。那么这将很重要。如果只有 7 条记录匹配 column_2 和 column_3 那么这无关紧要。
运行 对查询的 EXPLAIN,看看优化器的计划是什么。 This page 将帮助您解读结果。
请考虑一个包含 7000 万条记录的 NuoDB 数据库中的 table "TABLE"。 还要考虑 "TABLE" 中存在的列是 column_1、columne_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 进行索引扫描。但是一旦它有了那个部分结果,它就必须为每个剩余的记录加载原子来处理谓词的最后部分。
那么,如果 table 中有 70,000,000 条记录并且其中 90% 匹配 column_2=?和 column_3=?。那么这将很重要。如果只有 7 条记录匹配 column_2 和 column_3 那么这无关紧要。
运行 对查询的 EXPLAIN,看看优化器的计划是什么。 This page 将帮助您解读结果。