Низкая производительность при использовании условного предложения where в Sybase - PullRequest
0 голосов
/ 08 февраля 2012

У меня есть следующий SQL, который я пытаюсь выполнить в Sybase.В SQL Server эти типы запросов являются стандартными, но производительность делает их непригодными для использования в Sybase.

DECLARE
    @pMEME_FIRST_NAME char(100),
    @pMEME_LAST_NAME char(100)

SET @pMEME_FIRST_NAME = 'Lisa'
SET @pMEME_LAST_NAME = 'Spivey'

    SELECT TOP 1 CMC_MEME_MEMBER.MEME_FIRST_NAME,
        CMC_MEME_MEMBER.MEME_LAST_NAME,
        CMC_MEME_MEMBER.MEME_SEX,
        CMC_MEME_MEMBER.MEME_SFX,
        CMC_SBSB_SUBSC.SBSB_ID, 
        CMC_MEME_MEMBER.MEME_REL,
        CMC_SBAD_ADDR.SBAD_ADDR1,
        CMC_SBAD_ADDR.SBAD_ADDR2,
        CMC_SBAD_ADDR.SBAD_CITY,
        CMC_SBAD_ADDR.SBAD_STATE,
        CMC_SBAD_ADDR.SBAD_ZIP,
        CMC_GRGR_GROUP.GRGR_ID,
        CMC_GRGR_GROUP.GRGR_NAME,
        CMC_MEME_MEMBER.MEME_SSN,   
        CMC_MEME_MEMBER.MEME_BIRTH_DT,
        CMC_MEME_MEMBER.MEME_CK,
        CMC_MEME_MEMBER.SBSB_CK,
        CMC_MEME_MEMBER.GRGR_CK,
        CMC_MEME_MEMBER.MEME_FAM_LINK_ID
    FROM CMC_MEME_MEMBER CMC_MEME_MEMBER
        INNER JOIN CMC_SBSB_SUBSC CMC_SBSB_SUBSC
        ON CMC_MEME_MEMBER.SBSB_CK = CMC_SBSB_SUBSC.SBSB_CK
        AND CMC_MEME_MEMBER.GRGR_CK = CMC_SBSB_SUBSC.GRGR_CK

        INNER JOIN CMC_SBAD_ADDR CMC_SBAD_ADDR
        ON CMC_MEME_MEMBER.SBSB_CK = CMC_SBAD_ADDR.SBSB_CK
        AND CMC_MEME_MEMBER.GRGR_CK = CMC_SBAD_ADDR.GRGR_CK

        INNER JOIN CMC_GRGR_GROUP CMC_GRGR_GROUP
        ON CMC_MEME_MEMBER.GRGR_CK = CMC_GRGR_GROUP.GRGR_CK
    WHERE (@pMEME_FIRST_NAME IS NULL OR (CMC_MEME_MEMBER.MEME_FIRST_NAME = @pMEME_FIRST_NAME))
    AND (@pMEME_LAST_NAME IS NULL OR (CMC_MEME_MEMBER.MEME_LAST_NAME = @pMEME_LAST_NAME))
--    WHERE ((CMC_MEME_MEMBER.MEME_FIRST_NAME = @pMEME_FIRST_NAME))
--    AND ((CMC_MEME_MEMBER.MEME_LAST_NAME = @pMEME_LAST_NAME))

Если я выполняю одну из проверок IS NULL, запрос выполняется в миллисекундах.

Есть идеи?

...