【发布时间】:2018-12-20 03:45:42
【问题描述】:
最近遇到的一个场景,我有很多选择语句:
and (UPPER(Table1.col1) LIKE UPPER(v_param1)||'%' or v_param1 is NULL)
and (UPPER(Table2.col2) LIKE UPPER(v_param2)||'%' or v_param2 is NULL)
v_param1 & v_param2 是存储过程的输入,我需要优化查询。有什么方法可以检查v_param1,v_param1 是否为NULL,那么就不需要在Or 之前检查第一个条件。
【问题讨论】:
-
您可以做的一件事是在第 1 列和第 2 列的上部创建一个基于函数的索引
-
感谢您的回复,这不符合我的要求,因为 and 子句有很多选择,并且在这些子句上创建索引会降低其他服务对这些表进行插入或更新的性能。跨度>
-
您不能以大写形式存储 Table1.col1 和 Table1.col2。这将避免在查询期间将它们转换为大写的过载。