在我们的环境中,一个过程需要很长时间才能执行。我已经检查了程序,以下是摘要-
该过程仅包含选择块(大约 24 个)。在每次选择之前,我们都会检查数据是否存在。如果是,请选择数据,否则执行其他操作。例如 :
-- Select block 1 -- IF EXISTS (SELECT 1 FROM table1 t1 INNER JOIN table2 t2 ON t1.col1=t2.col1 WHERE t1.col2='someValue' AND t2.col2='someValue' ) BEGIN SELECT t1.col1,t2.col2,t2.col3 FROM table1 t1 INNER JOIN table2 t2 ON t1.col1=t2.col1 WHERE t1.col2='someValue' AND t2.col2='someValue' END ELSE BEGIN SELECT 'DEFAULT1', 'DEFAULT2', 'DEFAULT3' END -- Select block 2 -- IF EXISTS (SELECT 1 FROM table1 t1 INNER JOIN table2 t2 ON t1.col1=t2.col1 WHERE t1.col5='someValue' AND t2.col5='someValue' ) BEGIN SELECT t1.col5,t2.col6,t2.col7 FROM table1 t1 INNER JOIN table2 t2 ON t1.col1=t2.col1 WHERE t1.col5='someValue' AND t2.col5='someValue' END ELSE BEGIN SELECT 'DEFAULT1', 'DEFAULT2', 'DEFAULT3' END
我得出的结论是,如果我们能以某种方式将 IF EXISTS 块中使用的查询合并到一个查询中,并为一些变量设置一些值,以便我们可以识别哪个条件返回 true,那么可以减少执行时间并提高性能。
我的想法正确吗?有什么选择吗?你能建议任何其他选择吗?
我们使用的是 Microsoft SQL Server 2005。
[已编辑:已添加] - 所有 select 语句都不会返回相同的列类型,它们是不同的。并且所有选择语句都是必需的。如果有 24 个 if 块,则过程应返回 24 个结果集。
[添加]
我想再问一件事,以下哪一项运行得更快-
- SELECT 1 FROM table1 t1 INNER JOIN table2 t2 ON t1.col1=t2.col1 WHERE t1.col2='someValue' AND t2.col2='someValue'
- SELECT COUNT(1) FROM table1 t1 INNER JOIN table2 t2 ON t1.col1=t2.col1 WHERE t1.col2='someValue' AND t2.col2='someValue'
- SELECT TOP 1 1 FROM table1 t1 INNER JOIN table2 t2 ON t1.col1=t2.col1 WHERE t1.col2='someValue' AND t2.col2='someValue'
谢谢。卡提克