chore(occurrences): add GIN index for JSONB columns
This commit is contained in:
parent
5c7b4cff93
commit
f17d89c21e
@ -43,6 +43,7 @@ data DailyTableActionData = DailyActDummyData
|
|||||||
deriving (Eq, Ord, Read, Show, Generic)
|
deriving (Eq, Ord, Read, Show, Generic)
|
||||||
|
|
||||||
-- | partial JSON object to be used for filtering with "@>"
|
-- | partial JSON object to be used for filtering with "@>"
|
||||||
|
-- ensure that a GIN index for the jsonb column is created in Model.Migration.Definitions
|
||||||
occurrenceDayValue :: Day -> Value
|
occurrenceDayValue :: Day -> Value
|
||||||
occurrenceDayValue d = Aeson.object
|
occurrenceDayValue d = Aeson.object
|
||||||
[ "exceptions" Aeson..=
|
[ "exceptions" Aeson..=
|
||||||
@ -50,7 +51,6 @@ occurrenceDayValue d = Aeson.object
|
|||||||
[ "exception" Aeson..= ("occur"::Text)
|
[ "exception" Aeson..= ("occur"::Text)
|
||||||
, "day" Aeson..= d
|
, "day" Aeson..= d
|
||||||
] ] ]
|
] ] ]
|
||||||
-- TODO: ensure that an appropriate GIN index for the jsonb column is set
|
|
||||||
|
|
||||||
{- More efficient DB-only version, but ignores regular schedules
|
{- More efficient DB-only version, but ignores regular schedules
|
||||||
getDayTutorials :: SchoolId -> Day -> DB [TutorialId]
|
getDayTutorials :: SchoolId -> Day -> DB [TutorialId]
|
||||||
@ -87,8 +87,8 @@ getDayTutorials ssh dlimit@(dstart, dend )
|
|||||||
where
|
where
|
||||||
period = Set.fromAscList [dstart..dend]
|
period = Set.fromAscList [dstart..dend]
|
||||||
|
|
||||||
-- TODO: checkCandidate (_, Entity{entityKey=tutId}, E.unValue -> True) = Just tutId -- common case
|
checkCandidate (_, Entity{entityKey=tutId}, E.unValue -> True) = Just tutId -- most common case
|
||||||
checkCandidate (Entity{entityVal=trm}, Entity{entityKey=tutId, entityVal=Tutorial{tutorialTime=JSONB occ}},_)
|
checkCandidate (Entity{entityVal=trm}, Entity{entityKey=tutId, entityVal=Tutorial{tutorialTime=JSONB occ}}, _)
|
||||||
| not $ Set.null $ Set.intersection period $ occurrencesCompute' trm occ
|
| not $ Set.null $ Set.intersection period $ occurrencesCompute' trm occ
|
||||||
= Just tutId
|
= Just tutId
|
||||||
| otherwise
|
| otherwise
|
||||||
|
|||||||
@ -100,6 +100,8 @@ migrateManual = do
|
|||||||
, ("idx_lms_report_log_q_ident_time" ,"CREATE INDEX idx_lms_report_log_q_ident_time ON \"lms_report_log\" (\"qualification\",\"ident\",\"timestamp\")")
|
, ("idx_lms_report_log_q_ident_time" ,"CREATE INDEX idx_lms_report_log_q_ident_time ON \"lms_report_log\" (\"qualification\",\"ident\",\"timestamp\")")
|
||||||
, ("idx_user_company_company" ,"CREATE INDEX idx_user_company_company ON \"user_company\" (\"company\")") -- composed index from unique cannot be used for frequently used filters on company
|
, ("idx_user_company_company" ,"CREATE INDEX idx_user_company_company ON \"user_company\" (\"company\")") -- composed index from unique cannot be used for frequently used filters on company
|
||||||
, ("idx_user_supervisor_user" ,"CREATE INDEX idx_user_supervisor_user ON \"user_supervisor\" (\"user\")") -- composed index from unique cannot be used for frequently used filters on user
|
, ("idx_user_supervisor_user" ,"CREATE INDEX idx_user_supervisor_user ON \"user_supervisor\" (\"user\")") -- composed index from unique cannot be used for frequently used filters on user
|
||||||
|
, ("idx_tutorial_time" ,"CREATE INDEX idx_tutorial_time ON \"tutorial\" USING GIN (\"time\")") -- GIN Index to speed up filtering with @>.
|
||||||
|
, ("idx_course_event_time" ,"CREATE INDEX idx_course_event_time ON \"course_event\" USING GIN (\"time\")") -- GIN Index to speed up filtering with @>.
|
||||||
]
|
]
|
||||||
where
|
where
|
||||||
addIndex :: Text -> Sql -> Migration
|
addIndex :: Text -> Sql -> Migration
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user