假设我有一个包含10M enries的表格,当我有这个查询时:
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倍。
所以,我猜,强加那个范围会让我的查询变得更快。
在另一张桌子上,使用类似的键和列,情况并非如此。无论我是否有中间人,都需要相同的时间。
需要注意的一些事项是:
所以,我的问题是,这是真的,还是真的取决于? 'between'会缩短查询时间吗?
答案 0 :(得分:1)
我的回答主要是关于MySQL,但是我发现BETWEEN运算符在DB2中也得到了优化。
在某些索引中,您需要将column_name作为FIRST列,以便BETWEEN能够在一般情况下使用它。
你在那里完成count / group,mysql可以使用任何包含该列的索引进行全索引扫描,因为索引通常比整个表更小(在datasize中读取)。
结果 - 如果它可以使用BETWEEN的索引然后添加它意味着按比例减少行数等于比例加速(不完全是,还有一些其他开销)。当您只使用整个表中的一列时,对于大多数优化来说,它是“最佳”的情况。其他查询可能表现不同。但是在大多数限制列上使用索引确实有助于处理更少的行,从而转换为更少的磁盘操作等,从而使查询更快。
学习使用EXPLAIN - 在那里你可以看到使用的索引和要处理的估计行数以及其他信息。