sql – 优化BETWEEN日期语句

前端之家收集整理的这篇文章主要介绍了sql – 优化BETWEEN日期语句前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要帮助优化PostgreSQL查询,该查询使用带有时间戳字段的BETWEEN子句.

我有2张桌子:

ONE(int id_one(PK),datetime cut_time,int f1 . . .)

包含大约3394行

TWO(int id_two(PK),int id_one(FK),int f2 . . .)

包含大约4000000行

在FK id_one和cut_time上,PKs id_one和id_two上都有btree索引.

我想执行如下查询

select o.id_one,Date(o.cut_time),o.f1,t.f2 
from one o
inner join two t ON (o.id_one = t.id_one)
where o.cut_time between '2013-01-01' and '2013-01-31';

查询在大约7秒内检索大约1.700.000行.

报告分析报告下面报告:

"Merge Join  (cost=20000000003.53..20000197562.38 rows=1680916 width=24) (actual time=0.017..741.718 rows=1692345 loops=1)"
"  Merge Cond: (c.coilid = hf.coilid)"
"  ->  Index Scan using pk_coils on coils c  (cost=10000000000.00..10000000382.13 rows=1420 width=16) (actual time=0.008..4.539 rows=1404 loops=1)"
"        Filter: ((cut_time >= '2013-01-01 00:00:00'::timestamp without time zone) AND (cut_time <= '2013-01-31 00:00:00'::timestamp without time zone))"
"        Rows Removed by Filter: 1990"
"  ->  Index Scan using idx_fk_lf_data on hf_data hf  (cost=10000000000.00..10000166145.90 rows=4017625 width=16) (actual time=0.003..392.535 rows=1963386 loops=1)"
"Total runtime: 768.473 ms"

不使用timestamp列上的索引.如何优化此查询

解决方法

查询在不到一秒的时间内执行.其他6秒用于服务器和客户端之间的流量.

猜你在找的MsSQL相关文章