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?表和索引定义? 你为什么标记到.net
和c#
?我不是 SQL 开发人员,但仍然有疑问,不知道表结构和关系如何有人可以帮助您调整查询?
还显示表结构(特别是索引和主键)。提供有关当前执行计划和表大小的信息。
我正在使用 sql server 和 sort distinct sort cost 80% 显示不执行计划
编辑您的问题以添加表和索引的 DDL。另外,添加一个链接到上传到brentozar.com/pastetheplan 的实际执行计划。该计划的图像很漂亮,但掩盖了重要的细节。
【参考方案1】:
有几种方法可以解决这个问题。
首先,您可以从查询中删除 distinct 子句。这会立即提高性能,然后您可以对应用程序代码/excel/用于移动此数据的任何输出中的唯一性进行排序。
其次(如果还没有的话)你可以在你用来加入的 id 列上创建聚集索引。您还可以在查询中包含的其他列上包含非聚集索引(不要创建包含表中每一列的非聚集索引,因为这会使索引无用)。
第三,您可以在选择中包含更少的列,然后根据返回的值,您可以执行进一步的查询以获取剩余信息。这种方法将使您的初始加载更快,但总体而言,获取所有数据需要更长的时间。
【讨论】:
以上是关于sql查询速度慢如何优化的主要内容,如果未能解决你的问题,请参考以下文章