sql查询慢怎么优化

时间:2019-04-26 11:27:24

标签: sql sql-server query-performance

enter image description here  这是我查询的执行计划

我想优化查询,下面给出了我的表结构

this is my collection table

this is my transaction table

SELECT DISTINCT 
        c.transaction_id, 
        c.property_id, 
        c.ward_id,
        w.ward_no, 
        c.holding_no, 
        c.collector_id, 
        t.payment_mode, 
        t.date, 
        t.payment_ref, 
        t.dd_date, 
        t.bank_name, 
        t.branch, 
        t.amount, 
        t.discount, 
        t.transaction_no, 
        t.pos_no, 
        t.sms_status, 
        t.remarks, 
        ch.id AS cheque_id, 
        ch.check_no, 
        ch.bank, 
        ch.check_date, 
        ch.amount AS chk_amount, 
        ch.reconcilation_date, 
        ch.chk_status, 
        ch.status AS isValid, 
        ch.bank_reconcilation_date, 
        t.penalty
    FROM  
        dbo.tbl_collection_master AS c 
            INNER JOIN dbo.tbl_transaction_master AS t 
                ON c.transaction_id = t.id 
                LEFT OUTER JOIN dbo.tbl_cheque_details AS ch 
                    ON t.id = ch.transaction_id 
            left join tbl_Ward_Master w 
                on c.ward_id = w.id

1 个答案:

答案 0 :(得分:0)

有两种方法可以解决此问题。

首先,您可以从查询中删除distingle子句。这样可以立即提高性能,然后您就可以在应用程序代码/ excel /任何用于移动此数据的输出中进行排序,以确保其唯一性。

第二(如果尚未),可以在要用于加入的id列上创建聚簇索引。您还可以在查询中包含的其他列上包括非聚集索引(不要在表中创建包含EVERY列的非聚集索引,因为这会使索引无用)。

第三,您可以在选择中包括较少的列,然后根据返回的值,可以执行进一步的查询以获取剩余信息。这种方法将使您的初始加载更快,但是总体上将花费更长的时间来获取所有数据。