Критерии Грааля работают слишком медленно - PullRequest
0 голосов
/ 21 февраля 2012

следующий критерий работает недопустимо медленно. Не вдаваясь в подробности первичных ключей или индексов таблицы, видите ли вы что-нибудь конкретное, что могло бы ускорить этот процесс?

def results = OpportunityApplication.createCriteria().list() {

            isNull('dateDeleted')

            or {
                opportunityInst {
                    isNull('dateDeleted')
                    opportunity {
                        isNull('dateDeleted')
                        gt('advertisingEndDate', new Date())
                        eq('useOrgAsContact', false)
                    }
                    opportunityLocation {
                        isNull('dateDeleted')
                        eq("email", user.email)
                    }
                }

                if (isPartner)
                {
                    opportunityInst {
                        isNull('dateDeleted')
                        opportunity {
                            isNull('dateDeleted')
                            gt('advertisingEndDate', new Date())
                            eq('useOrgAsContact', true)
                            organisation {
                                isNull('dateDeleted')
                                eq("email", user.email)
                            }
                        }
                    }
                }
            }

        }

1 Ответ

0 голосов
/ 23 февраля 2012

Оптимизация по моим критериям была довольно простой. Все, что мне нужно было сделать, это переместить повторяющиеся фрагменты в общий фрагмент кода следующим образом

opportunityInst {
                isNull('dateDeleted')
                opportunity {
                    isNull('dateDeleted')
                    gt('advertisingEndDate', new Date())
                }
                or {
                    if (isPartner)
                    {
                        opportunity {
                            eq('useOrgAsContact', true)
                            organisation {
                                isNull('dateDeleted')
                                eq("email", user.email)
                            }
                        }
                    }
                    and {
                        opportunity {
                            eq('useOrgAsContact', false)
                        }
                        opportunityLocation {
                            isNull('dateDeleted')
                            eq("email", user.email)
                        }
                    }
                }
            }
...