Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 创建索引并没有改变我的查询成本_Database_Postgresql_Query Optimization - Fatal编程技术网

Database 创建索引并没有改变我的查询成本

Database 创建索引并没有改变我的查询成本,database,postgresql,query-optimization,Database,Postgresql,Query Optimization,我试图通过在评级列上创建索引来降低查询执行的成本。该表有2680个元组 SELECT * from cup_matches WHERE rating*3 > 20 然而,当我使用pgAdmin查看索引前后的查询成本时,它保持不变。由于索引(减少I/O成本)到内存,我认为它会减少,因为索引过程会减少从硬盘获取数据的成本。有人能告诉我为什么它保持不变吗?因为索引在评级上,而不是评级*3。要使用当前索引,请尝试 SELECT * from cup_matches WHERE rating &

我试图通过在评级列上创建索引来降低查询执行的成本。该表有2680个元组

 SELECT * from cup_matches WHERE rating*3 > 20

然而,当我使用pgAdmin查看索引前后的查询成本时,它保持不变。由于索引(减少I/O成本)到内存,我认为它会减少,因为索引过程会减少从硬盘获取数据的成本。有人能告诉我为什么它保持不变吗?

因为索引在
评级
上,而不是
评级*3
。要使用当前索引,请尝试

SELECT * from cup_matches WHERE rating > 20/3

成本并没有减少,因为您正在where中执行变异操作,因此它无法使用索引。删除“*3”操作就可以了

 SELECT * from cup_matches WHERE rating > 20

应该提高性能,因为您不再改变评级值。当值发生变化时,您需要进行完整的表扫描以进行比较。

执行计划是什么?您可以通过
EXPLAIN
EXPLAIN ANALYZE
命令找到这一点。为什么要执行
rating*3>20
而不是
rating>20/3
?@jmelesky Seq扫描杯形匹配(成本=0.00..61.20行=893宽度=27)(实际时间=0.026..1.114行=1215个循环=1)过滤器:((rating*'3':双精度)>'20'::双精度)过滤器删除的行:1465计划时间:0.138毫秒执行时间:1.226ms@BShaps这会导致成本保持不变吗?不要在注释中添加代码或附加信息。您的问题,并确保在添加执行计划时保留缩进。这里应该提到20/3==6。但是为什么执行时间会减少呢?