Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I optimize this query in Firebird 2.1?

I'm using Firebird 2.1 and I'd need some help optimizing this query: (maybe by replacing IN-s with JOINS or something to speed it up, as it is very slow)

SELECT ClientID, ClientType, ClientName 
FROM Clients 
WHERE 
    (
        AccessRights = 0 OR 
        OwnerUserID = :uid OR 
        (
            AccessRights = 2 AND 
            ClientID IN (SELECT ClientID 
                            FROM ClientRights 
                            WHERE UserID = :uid)
        )
    ) 
    AND ClientID IN (SELECT CC.ClientID 
                    FROM CaseClients CC 
                    WHERE CC.CaseID IN (SELECT DISTINCT CaseID 
                                        FROM TimeSheet 
                                        WHERE IsBilled = 0) 
                        AND CC.ClientToBill = 1 
                        AND (SELECT BillingType 
                                FROM Cases 
                                WHERE CaseID = CC.CaseID) = 2
    );

Thanks!

like image 722
Steve Avatar asked Nov 21 '25 18:11

Steve


1 Answers

SELECT ClientID, ClientType, ClientName FROM Clients 
WHERE 
(
    AccessRights = 0 OR 
    OwnerUserID = :uid OR 
    (
        AccessRights = 2 AND 
        EXISTS(SELECT * FROM ClientRights r WHERE r.UserID = :uid and r.ClientId=Clients.ClientID)
    )
) 
AND EXISTS(SELECT * 
                FROM CaseClients CC 
                WHERE 
                CC.ClientID=Clients.ClientID and
                   EXISTS(SELECT * FROM TimeSheet 
                          WHERE IsBilled = 0 and TimeSheet.CaseID=CC.CaseID) 
                    AND CC.ClientToBill = 1 
                    AND EXISTS(SELECT BillingType 
                            FROM Cases 
                            WHERE CaseID = CC.CaseID and BillingType=2)
);
like image 85
rstrelba Avatar answered Nov 23 '25 10:11

rstrelba



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!