sql查询速度慢如何优化

Posted

技术标签:

【中文标题】sql查询速度慢如何优化【英文标题】:sql query is slow how to optimise 【发布时间】:2019-04-26 11:27:23 【问题描述】:

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

【问题讨论】:

有什么解释/执行计划要展示吗?您使用的是哪个 dbms?表和索引定义? 你为什么标记到.netc#?我不是 SQL 开发人员,但仍然有疑问,不知道表结构和关系如何有人可以帮助您调整查询? 还显示表结构(特别是索引和主键)。提供有关当前执行计划和表大小的信息。 我正在使用 sql server 和 sort distinct sort cost 80% 显示不执行计划 编辑您的问题以添加表和索引的 DDL。另外,添加一个链接到上传到brentozar.com/pastetheplan 的实际执行计划。该计划的图像很漂亮,但掩盖了重要的细节。 【参考方案1】:

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

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

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

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

【讨论】:

以上是关于sql查询速度慢如何优化的主要内容,如果未能解决你的问题,请参考以下文章

mysql查询速度慢

为啥NATIVE FOR ORACLE查询速度慢

Oracle查询速度优化问题

如何进行SQL性能优化

mysql 表记录超过十万条后,查询速度特别慢?

MySQL中like查询速度慢的问题