【发布时间】:2019-06-25 17:23:57
【问题描述】:
我有一个 api 端点,它接受用于过滤特定列的不同参数。出于这个原因,我正在尝试构建一个易于将任意过滤器添加到基本查询的查询。出于某种原因,如果我使用:
SELECT "MY_VIEW".*
FROM "MY_VIEW"
-- Distinct on ID filter
WHERE ID IN (SELECT Max(ID)
FROM "MY_VIEW"
GROUP BY ID)
-- Other arbitrary filters...
ORDER BY "MY_VIEW"."NAME" DESC
我的表现很糟糕,所以我开始使用这个查询:
SELECT * FROM "MY_VIEW"
-- Distinct on ID filter
LEFT JOIN(
SELECT DISTINCT
FIRST_VALUE("MY_VIEW"."ID")
OVER(PARTITION BY "MY_VIEW"."UNIQUE_ID") as DISTINCT_ID
FROM "MY_VIEW"
) d ON d.DISTINCT_ID = "MY_VIEW"."ID"
-- Other arbitrary filters...
ORDER BY "MY_VIEW"."NAME" DESC
)
但是,当我离开时,它会丢弃独特的过滤器。
我也不能使用 rowid,因为它是一个视图。
视图是一个版本化的表。
索引信息
独特性 | 状态 | INDEX_TYPE | 临时 | 分区 | JOIN_INDEX | 列
非唯一 |有效 |正常 | N |否 |否 | ID
独特 |有效 |正常 | N |否 |否 | UNIQUE_ID
非唯一 |有效 |域名 | N |否 |否 | 名字
【问题讨论】:
-
关于性能的问题应该包括
CREATE TABLE/VIEW结构和查询计划。如果没有这些信息,问题就很不清楚了。 -
查询计划不正确,我无权获取正在运行的查询的 sql_id。
-
至少为我们提供了索引可见的表/视图结构..
-
如果您没有访问权限,请询问有权访问的人。如果不查看计划、表结构和索引,就不可能调整此查询。我投票结束这个问题,因为不清楚。