enter image description here 这是我查询的执行计划
我想优化查询,下面给出了我的表结构
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
答案 0 :(得分:0)
有两种方法可以解决此问题。
首先,您可以从查询中删除distingle子句。这样可以立即提高性能,然后您就可以在应用程序代码/ excel /任何用于移动此数据的输出中进行排序,以确保其唯一性。
第二(如果尚未),可以在要用于加入的id列上创建聚簇索引。您还可以在查询中包含的其他列上包括非聚集索引(不要在表中创建包含EVERY列的非聚集索引,因为这会使索引无用)。
第三,您可以在选择中包括较少的列,然后根据返回的值,可以执行进一步的查询以获取剩余信息。这种方法将使您的初始加载更快,但是总体上将花费更长的时间来获取所有数据。