添加 between 会加快我的 SQL 查询吗?

Does adding between speed up my SQL query?

假设我有一个有 10M 条目的 table,当我有这个查询时:

SELECT column_name, count(column_name)
FROM my_table
GROUP BY column_name

需要很长时间才能完成。如果我知道 column_name 将具有给定的范围,并将我的查询拆分为不同的查询,其中每个查询如下所示:

SELECT column_name, count(column_name)
FROM my_table
WHERE column_name BETWEEN value_a AND value_b
GROUP BY column_name

我设法让它响应得更快。例如,通过检查时间,如果将其拆分为 10 个查询,则每个查询的响应速度会快 10 倍。

所以,我想,施加该范围可以使我的查询速度更快。

但在另一个 table 上,具有相似的键和列,情况并非如此。不管我有没有between,都是一样的时间

一些需要注意的事情是:

所以,我的问题是,是这种情况还是真的取决于情况? 'between' 是否减少了查询时间?

我的回答主要是关于 MySQL,但据我发现,BETWEEN 运算符在 DB2 中也得到了优化。

您需要将 column_name 作为某些索引中的第一列,以便 BETWEEN 能够在一般情况下使用它。

在那里完成 count/group 的地方 mysql 可以使用任何包含列的索引进行全索引扫描,因为索引通常比整个 table 小(以要读取的数据大小计) .

因此 - 如果它可以为 BETWEEN 使用索引,那么添加它意味着按比例读取更少的行,这等于按比例加速(不完全是,还有一些其他开销)。由于您只处理整个 table 中的一列,因此大多数优化都是 "optimal" 的情况。其他查询的行为可能不同。但是在最严格的列上建立索引确实有助于处理更少的行,这转化为更少的磁盘操作等,从而使查询更快。

学习使用 EXPLAIN - 在那里您可以看到使用的索引和估计要处理的行数等信息。