为什么我的 hasura 查询不使用索引扫描?
Why isn't my hasura query using an index scan?
我正在按照 Hasura 提供的关于如何优化我的查询的指南进行操作:
但我的查询仍在执行顺序扫描而不是索引扫描,我不明白为什么。
我正在使用不可为 null 的标量变量并创建了索引,但问题仍然存在。
索引:
CREATE INDEX shop_index ON "shop" (shop_origin);
查询:
query get_storefront_data ($shop_origin: String!) {
shop_by_pk(shop_origin: $shop_origin) {
app_subscription_type
currency_code
usage_count
}
}
变量:
{
"shop_origin": "test.myshopify.com"
}
执行计划(通过 Hasura 控制台中的“分析”按钮生成):
Aggregate (cost=1.05..1.07 rows=1 width=32)
-> Seq Scan on shop (cost=0.00..1.04 rows=1 width=16)
Filter: (shop_origin = 'test.myshopify.com'::text)
SubPlan 1
-> Result (cost=0.00..0.01 rows=1 width=32)
我做错了什么以及如何让查询执行索引扫描而不是顺序扫描?
对于小表,顺序扫描是最有效的访问方法。使用实际数量的数据执行有意义的性能测试。
我正在按照 Hasura 提供的关于如何优化我的查询的指南进行操作:
但我的查询仍在执行顺序扫描而不是索引扫描,我不明白为什么。
我正在使用不可为 null 的标量变量并创建了索引,但问题仍然存在。
索引:
CREATE INDEX shop_index ON "shop" (shop_origin);
查询:
query get_storefront_data ($shop_origin: String!) {
shop_by_pk(shop_origin: $shop_origin) {
app_subscription_type
currency_code
usage_count
}
}
变量:
{
"shop_origin": "test.myshopify.com"
}
执行计划(通过 Hasura 控制台中的“分析”按钮生成):
Aggregate (cost=1.05..1.07 rows=1 width=32)
-> Seq Scan on shop (cost=0.00..1.04 rows=1 width=16)
Filter: (shop_origin = 'test.myshopify.com'::text)
SubPlan 1
-> Result (cost=0.00..0.01 rows=1 width=32)
我做错了什么以及如何让查询执行索引扫描而不是顺序扫描?
对于小表,顺序扫描是最有效的访问方法。使用实际数量的数据执行有意义的性能测试。