我可以自动从postgresql中的一列中对元组进行排序吗?

时间:2014-02-02 11:57:38

标签: postgresql

我将数据放在posgresql表上,在运行一些查询(不包含ORDER BY子句)时,我发现在查询计划中(与EXPLAIN一起输出)很多时候用于从列中对元组进行排序。

版本:这是表格架构 有两种类型的表class_tableXprop_tableY。 以下是我如何构建它们并为它们编制索引。

CREATE TABLE IF NOT EXISTS "prop_tableY" (
    s VARCHAR(100), 
    p VARCHAR(100), 
    o VARCHAR(100), 
    PRIMARY KEY (s,p,o)
)                   

CREATE INDEX "index_prop_tableY" ON "prop_tableY" (s,p,o)

CREATE TABLE IF NOT EXISTS "class_tableX" (
    s VARCHAR(100), 
    o VARCHAR(100), 
    PRIMARY KEY (s,o)
)                   

CREATE INDEX "index_prop_tableX" ON "prop_tableY" (s,o)

版本:以下是查询

EXPLAIN SELECT t2.p AS prop, t2.o AS obj, COUNT(t2.o) AS num 
FROM "class_Event" AS t1, (
      (SELECT s,p,o FROM "prop_sliceHasAnomaly")  
UNION (SELECT s,p,o FROM "prop_eventHasDuration")  
UNION (SELECT s,p,o FROM "prop_sliceHasEndEvent")  
UNION (SELECT s,p,o FROM "prop_eventPrecedeInCPU")  
UNION (SELECT s,p,o FROM "prop_eventFollowInTask")  
UNION (SELECT s,p,o FROM "prop_topObjectProperty")  
UNION (SELECT s,p,o FROM "prop_eventDetails")  
UNION (SELECT s,p,o FROM "prop_switchTo")  
UNION (SELECT s,p,o FROM "prop_eventIsExecutedOn")  
UNION (SELECT s,p,o FROM "prop_runningAction")  
UNION (SELECT s,p,o FROM "prop_anomalyHasSlice")  
UNION (SELECT s,p,o FROM "prop_eventPrecedeInTrace")  
UNION (SELECT s,p,o FROM "prop_sliceHasStartEvent")  
UNION (SELECT s,p,o FROM "prop_eventHasActiveDuration")  
UNION (SELECT s,p,o FROM "prop_eventFollowInTrace")  
UNION (SELECT s,p,o FROM "prop_runningTask")  
UNION (SELECT s,p,o FROM "prop_eventOrdering")  
UNION (SELECT s,p,o FROM "prop_domain")  
UNION (SELECT s,p,o FROM "prop_sliceHasFunctionality")  
UNION (SELECT s,p,o FROM "prop_traceContainsEvent")  
UNION (SELECT s,p,o FROM "prop_eventHasDurationFromPreviousOccurrence")  
UNION (SELECT s,p,o FROM "prop_eventPrecedeOccurrence")  
UNION (SELECT s,p,o FROM "prop_eventPrecedeinTask")  
UNION (SELECT s,p,o FROM "prop_switchFrom")  
UNION (SELECT s,p,o FROM "prop_eventEndAt")  
UNION (SELECT s,p,o FROM "prop_subPropertyOf")  
UNION (SELECT s,p,o FROM "prop_eventFollowOccurrence")  
UNION (SELECT s,p,o FROM "prop_eventFollowInCPU")  
UNION (SELECT s,p,o FROM "prop_subClassOf")  
UNION (SELECT s,p,o FROM "prop_eventHasDurationToNextOccurrence")  
UNION (SELECT s,p,o FROM "prop_requestComponent")  
UNION (SELECT s,p,o FROM "prop_eventStartAt")  
UNION (SELECT s,p,o FROM "prop_range")  
UNION (SELECT s,p,o FROM "prop_functionalityHasSlice") ) AS t2,  
"prop_runningTask" t3 
WHERE   t1.s = t2.s         
    AND t3.s = t2.s         
    AND t3.o LIKE '%ts_record0%' 
GROUP BY t2.p, t2.o 
HAVING (COUNT(t2.o) > 1)  

enter image description here

所以我想知道是否有可能从表的列中自动排序(一次)元组以避免在查询执行期间执行这些排序步骤?

我的理解是,在插入表格之前可以对事物进行排序。但在我的情况下,由于隐私的原因很难做到。这就是为什么我对postgres实现的方法感兴趣

0 个答案:

没有答案