Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
优化SQL查询,改变ORs_Sql_Sql Server - Fatal编程技术网

优化SQL查询,改变ORs

优化SQL查询,改变ORs,sql,sql-server,Sql,Sql Server,在以下条件下,查询执行很长时间。我认为这取决于或条件。如何交替使用这些或s WHERE (p.tran_number = LTRIM(RTRIM(@tran_number)) OR ISNULL(LTRIM(RTRIM(@tran_number)), '') = '') AND (CAST(p.fiscal_date AS DATE) >= CAST(@begin_date AS DATE) OR @begin_date IS NULL) AND (CAST(p.fisca

在以下条件下,查询执行很长时间。我认为这取决于条件。如何交替使用这些s

WHERE (p.tran_number = LTRIM(RTRIM(@tran_number)) OR ISNULL(LTRIM(RTRIM(@tran_number)), '') = '')
    AND (CAST(p.fiscal_date AS DATE) >= CAST(@begin_date AS DATE) OR @begin_date IS NULL)
    AND (CAST(p.fiscal_date AS DATE) <= CAST(@end_date AS DATE) OR @end_date IS NULL)
    AND CAST(@end_date AS DATE)
    AND (p.operation_type = @operation_type OR @operation_type = '-1')
    AND (
           ce.username = @username
        OR @role_code LIKE '%admin%'
        OR @role_code LIKE '%Statists_GO%'
        OR (
            (ce.username IN (
                SELECT e.domain_username
                FROM @childTable c
                LEFT JOIN FstP.dbo.employees e ON e.id = c.obj_id
                    AND c.obj_type = 'employee'
            )
        )
        AND @role_code LIKE '%supervisor%')
    )
    AND (p.rnm = @rnm OR ISNULL(@rnm, '') = '')
    AND (ce.username = @author OR ISNULL(@author, '') = '')
    AND (
           d2.docs_num = @policy_number
        OR dGate.DealNumber = @policy_number
        OR ISNULL(@policy_number, '') = ''
    )
ORDER BY insert_date DESC, fiscal_date DESC
其中(p.tran_number=LTRIM(RTRIM(@tran_number))或ISNULL(LTRIM(RTRIM(@tran_number)),“”)=“”)
和(CAST(p.fiscal_date AS date)>=CAST(@begin_date AS date)或@begin_date为空)
和(CAST(p.fiscal_date AS date)
SET@begin_date=CAST(@begin_date AS date)
设置@end_date=DATEADD(第1天,演员阵容(@end_date AS date))
设置@tran_number=LTRIM(RTRIM(@tran_number))
...
其中(p.tran_number=@tran_number或ISNULL(@tran_number,')='')
和(p.fiscal\u date>=@begin\u date或@begin\u date为空)
和(p.会计日<@end\u日期或@end\u日期为空)
和(p.operation_type=@operation_type或@operation_type='-1')
及(
ce.username=@username
或者像“%admin%”这样的@role\u代码
或者像“%Statists\u GO%”这样的@role\u代码
或(
ce.username在(
选择e.domain\u用户名
来自@childTable c
在e.id=c.obj_id上加入FstP.dbo.e
和c.obj_type='employee'
)
和@role_代码,如“%supervisor%”
)
)
和(p.rnm=@rnm或ISNULL(@rnm,,)='')
和(ce.username=@author或ISNULL(@author,)='')
及(
d2.docs_num=@policy_number
或dGate.DealNumber=@policy_number
或ISNULL(@policy_number,,)=“”
)
按插入日期说明、会计日期说明订购
选项(重新编译)

请提供执行计划…在查询之前准备好所有变量。我的意思是所有那些
ltrim
isnull(,“”)
转换为日期。
SET @begin_date = CAST(@begin_date AS DATE)
SET @end_date = DATEADD(DAY, 1, CAST(@end_date AS DATE))
SET @tran_number = LTRIM(RTRIM(@tran_number))

...
WHERE (p.tran_number = @tran_number OR ISNULL(@tran_number, '') = '')
    AND (p.fiscal_date >= @begin_date OR @begin_date IS NULL)
    AND (p.fiscal_date < @end_date OR @end_date IS NULL)
    AND (p.operation_type = @operation_type OR @operation_type = '-1')
    AND (
           ce.username = @username
        OR @role_code LIKE '%admin%'
        OR @role_code LIKE '%Statists_GO%'
        OR (
            ce.username IN (
                    SELECT e.domain_username
                    FROM @childTable c
                    JOIN FstP.dbo.employees e ON e.id = c.obj_id
                        AND c.obj_type = 'employee'
                )
            AND @role_code LIKE '%supervisor%'
        )
    )
    AND (p.rnm = @rnm OR ISNULL(@rnm, '') = '')
    AND (ce.username = @author OR ISNULL(@author, '') = '')
    AND (
           d2.docs_num = @policy_number
        OR dGate.DealNumber = @policy_number
        OR ISNULL(@policy_number, '') = ''
    )
ORDER BY insert_date DESC, fiscal_date DESC
OPTION(RECOMPILE)