首页 > 解决方案 > sql查询速度慢如何优化

问题描述

在此处输入图像描述 这是我的查询的执行计划

我想优化查询我的表结构如下

这是我的收藏表

这是我的交易表

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

标签: sqlsql-serverquery-performance

解决方案


有几种方法可以解决这个问题。

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

其次(如果还没有的话)你可以在你用来加入的 id 列上创建聚集索引。您还可以在查询中包含的其他列上包含非聚集索引(不要创建包含表中每一列的非聚集索引,因为这会使索引无用)。

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


推荐阅读