这是视图的创建代码: USE [Transit] GO /****** 对象: View [dbo].[V_FIDS_FLIGHTLEG] 脚本日期: 09/27/2009 10:38:17 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER VIEW [dbo].[V_FIDS_FLIGHTLEG] AS SELECT [LEG_ID] ,[PDATE] ,[FLIGHT_NO]= case right(ltrim(rtrim(flight_no)),1) when '&' then substring(ltrim(rtrim(flight_no)),1,(len(ltrim(rtrim(flight_no)))-1)) when '#' then substring(ltrim(rtrim(flight_no)),1,(len(ltrim(rtrim(flight_no)))-1)) else ltrim(rtrim(flight_no)) end ,[FLIGHT_NO_DISP] ,[TAIL_NO] ,[AC_TYPE] ,[CARRIER] ,[DEPT_AIRPORT]= case dept_airport when 'HHA' then 'CSX' when 'ZGC' then 'LHW' else dept_airport end ,[DEPT_AGT] ,[DEPT_AC_LOC] ,[DEPT_GATE] ,[CHECK_IN] ,[WAIT_ROOM] ,[PLAN_DEPT_TIME] ,[EST_DEPT_TIME] ,[REAL_DEPT_TIME] ,[ARR_AIRPORT]= case dept_airport when 'HHA' then 'CSX' when 'ZGC' then 'LHW' else arr_airport end ,[ARR_AGT] ,[ARR_AC_LOC] ,[ARR_GATE] ,[ARR_ROOM] ,[PLAN_ARR_TIME] ,[EST_ARR_TIME] ,[REAL_ARR_TIME] ,[FLT_PROP] ,[INT_OR_DOM] ,[DELETE_FLAG] FROM FIDS..APT_INFORMATION.T_FLIGHTLEG AS T_FIDS_FLIGHTLEG WHERE DELETE_FLAG IN ('R', 'X', 'U', 'D')
慢的原因在:【DELETE_FLAG IN ('R', 'X', 'U', 'D')】,查询中出现【in】的话数据库会解析成下面这个样子去执行。 【DELETE_FLAG='R' OR DELETE_FLAG='X' OR DELETE_FLAG='U' OR DELETE_FLAG='D'】
而数据库一旦使用了【OR】条件做查询的话,索引就不会用到了,因此就会造成查询过慢。
建议:
SELECT 。。。。。 WHERE DELETE_FLAG='R' UNION SELECT 。。。。。 WHERE DELETE_FLAG='X' UNION SELECT 。。。。。 WHERE DELETE_FLAG='U' UNION SELECT 。。。。。 WHERE DELETE_FLAG='D'