ALTER PROCEDURE FindeAllOrderCompanyNO
@companyNO varchar(50),
@supplierNO varchar(50),
@settlement int,
@endDateTime datetime,
@sign bit,
@ticketingTime datetime
AS

declare @sql varchar(max)
SET NOCOUNT ON;
set @sql =' select * from vw_tickDetail_tickorders_tickAirLines where CompanyNO in (select CompanyNO from TicketOrders  GROUP by CompanyNO)  and GetTicketTime<'''+cast(@endDateTime as varchar(20))+''' and GetTicketTime>='''+cast(@ticketingTime as varchar(20))+'''  and  GetTicketSign='''+cast(@sign as varchar(20))+''' '
if @companyNO is not null and @companyNO!=''
set @sql +=' and CompanyNO ='''+@companyNO+''''
if @supplierNO is not null and @supplierNO!=''
set @sql +=' and tickDetailSupplierNO='''+@supplierNO+'''' 
if @settlement !='' and @settlement >-1
set @sql +=' and SettlementStatus='+@settlement+''

print @sql
exec (@sql)
RETURN各位大侠,,怎么修改才能使这个存储过程 提高查询效率

解决方案 »

  1.   

    CompanyNO in (select CompanyNO from TicketOrders GROUP by CompanyNO)
    ================================
    所有关联的表的  CompanyNO 字段都要建立索引。
    select CompanyNO from TicketOrders GROUP by CompanyNO 单独出来
    把结果拼接字符串
    改为CompanyNO in (拼接的字符串) 这样就能利用到索引,性能提升数十倍。where 、Group by 、order by 的字段都要建立索引,一般由后往前,具体自己把握。