首页
学习
活动
专区
圈层
工具
发布

SQL优化
EN

Stack Overflow用户
提问于 2018-06-07 08:33:11
回答 1查看 49关注 0票数 0

我正在开发一个数据库,目前总共存储了788个数据,并且随着时间的推移不断增加。

我的代码如下:

代码语言:javascript
复制
SELECT DISTINCT R.remarks, R.payerId, R.payername, R.payeraddress, R.collectorName, R.serialno, OOI.phone_no, CR.cr_no, F.application_no, R.series, R.txndate, R.amount, T.toda_name, B.brand_name, M.motor_no, M.chassis_no, 
                         M.plate_no, F.date_issue, M.year_model, M.body_color, OOI.ice_person_name, OOI.ice_person_address, OOI.ice_person_contact_no, M.motor_id, F.franchise_id, LEFT(R.remarks, 4) AS franchise_no, SUBSTRING(R.remarks, 
                         CHARINDEX('|', R.remarks) + 1, LEN(R.remarks)) AS motor_noremarks
FROM            etracs_tayabas.dbo.Receipt AS R INNER JOIN
                         etracs_tayabas.dbo.ReceiptItem AS RI ON RI.parentid = R.objid INNER JOIN
                         etracs_tayabas.dbo.IncomeAccount AS IA ON IA.objid = RI.acctid LEFT OUTER JOIN
                         dbo.vfTA_tblMotor AS M ON M.motor_no = SUBSTRING(R.remarks, CHARINDEX('|', R.remarks) + 1, LEN(R.remarks)) LEFT OUTER JOIN
                         dbo.vfTA_tblOperatorOtherInfo AS OOI ON OOI.operator_id = R.payerId LEFT OUTER JOIN
                         dbo.vfTA_tblCertificateOfRegistration AS CR ON CR.motor_id = M.motor_id LEFT OUTER JOIN
                         dbo.vfTA_tblFranchise AS F ON F.or_id = R.objid LEFT OUTER JOIN
                         dbo.vfTA_tblTODA AS T ON T.toda_id = M.toda_id LEFT OUTER JOIN
                         dbo.vfTA_tblReconciledTaxpayer AS RT ON RT.payer_id = R.payerId LEFT OUTER JOIN
                         dbo.vfTA_tblBrand AS B ON B.brand_id = M.brand_id
WHERE        (IA.objid = 'FTFA00000242') AND (F.franchise_id IS NULL) AND (R.voidId IS NULL) AND (R.remarks IS NOT NULL) AND (RT.rtp_id IS NULL)

每次运行此代码时,加载所有值总是要花费10分钟或更长的时间。我试图对相同的代码创建一个SQL视图,但是当我运行它时,错误Execution Timeout总是会显示出来。

我想知道:

  1. 视图和存储过程的最佳优化方法是什么?
  2. 如果有788个数据,并且随着时间的推移,我如何减少加载数据所需的时间?
  3. 如何防止大量执行超时发生在SQL中,甚至在程序中?
  4. 一些帮助教授SQL优化的网站。

我现在正在学习优化,因为我注意到当我进行查询时,通常需要很长的时间来加载,有时会产生错误的'Execution Timeout'

我现在是新来的。提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2018-06-07 08:50:04

我认为对这么多列使用DISTINCT很费钱。这真的是你的查询所必需的吗?

我也想知道下面的部分。

代码语言:javascript
复制
LEFT OUTER JOIN dbo.vfTA_tblMotor AS M ON M.motor_no = SUBSTRING(R.remarks, CHARINDEX('|', R.remarks) + 1, LEN(R.remarks))

这意味着没有办法为这种关系使用索引。将列添加到存储子字符串结果的表etracs_tayabas.dbo.Receipt中,并在将记录插入/更新到表时计算该列如何?通过这种方式,您可以为这种关系建立索引,并可以优化联接的这一部分。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50736534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档