首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >提高从视图中获取数据的查询性能

提高从视图中获取数据的查询性能
EN

Stack Overflow用户
提问于 2012-12-24 09:40:16
回答 2查看 203关注 0票数 3

我有一个sql查询,它只从View获取一条记录。我的观点是由许多功能组成的。它正在归还大约60,000份记录。我想从这个视图中获取的最高记录是8-9秒。我如何优化我的视图,使它最多需要1-2秒。这里是我的视图和sql查询。请帮帮我!任何建议都是可以接受的。提前谢谢。

代码语言:javascript
复制
CREATE View dbo.OMOrderPrePaymentINT    
As    

select   
   dbo.int_payment_customer_number_out('','OMOrderPaymentMasterINT',payment_id)  
   as customer_number,    
   dbo.int_customer_name_out('','OMOrderPaymentMasterINT',payment_id)     
   as customer_name,    
   dbo.int_FormatDate('','OMOrderPaymentMasterINT',document_date)      
   as payment_date,    
   dbo.int_payment_amount_out('','OMOrderPaymentMasterINT',document_amount)   
   as payment_amount,    
   dbo.int_checkbook_id_out('','OMOrderPaymentMasterINT',null)                         
   as checkbook_id,    
   dbo.int_cheque_number_out('','OMOrderPaymentMasterINT',payment_id)     
   as cheque_number,    
   dbo.int_cc_type_out ('','OMOrderPaymentMasterINT',payment_id)      
   as cc_type,    
   dbo.int_cc_number_out('','OMOrderPaymentMasterINT',payment_id)      
   as cc_number,    
   dbo.int_cc_authcode_out('','OMOrderPaymentMasterINT',payment_id)     
   as cc_authcode,    
   dbo.int_ach_account_type_out('','OMOrderPaymentMasterINT',payment_id)    
   as ach_account_type,    
   dbo.int_ach_account_number_out('','OMOrderPaymentMasterINT',payment_id)    
   as ach_account_number,    
   dbo.int_ach_authcode_out('','OMOrderPaymentMasterINT',payment_id)     
   as ach_authcode,    
   dbo.int_expiration_date_out('','OMOrderPaymentMasterINT',payment_id)    
   as creditcard_expiration_date,    
   dbo.int_order_payment_type_out('','OMOrderPaymentMasterINT',payment_id)          
   as payment_type,    
   dbo.int_payment_method_out('','OMOrderPaymentMasterINT',payment_id)     
   as payment_method,    
   dbo.int_erp_payment_action_out('','OMOrderPaymentMasterINT',null)     
   as [action],    
   dbo.int_modified_user_id_out('','',null)           
   as modified_user_id,    
   'NOT MAPPED'                  
   as void_date,    
   export_completed                 
   as exportcompleted,    
   dbo.int_ordergroup_id_out('','OMOrderPaymentMasterINT',payment_id)     
   as ordergroup_id,    
   'ECOM'                    
   as USRDEFND1,    
   dbo.int_ResponseToken_out('','OMOrderPaymentMasterINT',payment_id)     
   as USRDEFND4,    
   dbo.int_transaction_id_out('','OMOrderPaymentMasterINT',payment_id)     
   as USRDEFND5  
from PaymentLine 
where dbo.int_exportPayment(payment_id) = 1  

SQL查询

代码语言:javascript
复制
select top 1  * 
from OMOrderPrePaymentINT 
where ordergroup_id = '943177C1-50B6-4E7C-A442-BA90CF2A03F6'     
order by payment_date desc  
EN

回答 2

Stack Overflow用户

发布于 2012-12-24 09:44:48

唉哟。

众所周知,在SQL server中,用户定义的函数是表现最差的罪犯,您的视图经常使用中的许多。UDF在逐行模式下工作,因此需要一段时间。

尝试用内联SQL尽可能多地替换它们。

票数 5
EN

Stack Overflow用户

发布于 2012-12-24 09:47:20

内联sql所不能做的函数是什么?每个函数调用都将对该给定函数使用查询执行计划。如果使用内联SQL代替函数调用,则将使用一个整体(预期效率最高)查询执行计划。

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

https://stackoverflow.com/questions/14019597

复制
相关文章

相似问题

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