我在Postgres中有一个SQL表,其中列为x
,y
,z
。我有关于x
和y
的索引.桌子的大小约为3 Gb。
为了选择数据区域,我运行以下形式的查询:
SELECT x, y, z
FROM table
WHERE (x BETWEEN lowX and highX)
AND (y BETWEEN lowY and highY)
这是对 select 语句进行编码的最有效方法吗?感谢您的建议。
SQL是一种声明式语言 - 你使用SQL来定义你想要的数据;由数据库引擎决定获取数据的最有效方式。
也就是说,如果x
和y
上只有单个索引,则只使用一个索引(将扫描与x
索引匹配的表行以确定它们是否满足y
和z
条件)。x
和y
的复合索引将允许引擎只扫描满足这两个条件的项目:
CREATE INDEX table_xy_idx ON table (x, y);
请注意,这会使您的索引x
过时,因为复合索引可用于查找给定查询的匹配x
值。
由于您使用的是postgresql,因此我建议使用几何数据类型和空间索引。效率取决于查询的选择性,但是,值得一试。