आपको जो चाहिए वह है "स्किप स्कैन" या "ढीला इंडेक्स स्कैन ". PostgreSQL का योजनाकार अभी तक उन्हें स्वचालित रूप से लागू नहीं करता है, लेकिन आप इसे पुनरावर्ती क्वेरी का उपयोग करके एक का उपयोग करने में धोखा दे सकते हैं।
WITH RECURSIVE t AS (
SELECT min(eventtype) AS eventtype FROM allevents
UNION ALL
SELECT (SELECT min(eventtype) as eventtype FROM allevents WHERE eventtype > t.eventtype)
FROM t where t.eventtype is not null
)
select eventtype, (select max(eventtime) from allevents where eventtype=t.eventtype) from t;
उस क्वेरी के बाहर करने के बजाय अधिकतम (ईवेंटटाइम) को रिकर्सिव क्वेरी में संक्षिप्त करने का एक तरीका हो सकता है, लेकिन यदि ऐसा है तो मैंने उस पर हिट नहीं किया है।
कुशल होने के लिए इसे (ईवेंट टाइप, इवेंटटाइम) पर एक इंडेक्स की आवश्यकता होती है। आप इसे घटना के समय डीईएससी कर सकते हैं, लेकिन यह आवश्यक नहीं है। यह केवल तभी प्रभावी होता है जब ईवेंट प्रकार में केवल कुछ विशिष्ट मान हों (उनमें से 21, आपके मामले में)।