我想从配置单元2上的一个非常大的表中筛选以“\u ends\u with”结尾的字符串\u字段,我有两个选择,它们的解释看起来几乎相同,一个使用substr,另一个使用like,在性能方面有什么更好的?什么会随着时间的推移运行得更快/使用更少的资源?为了解释除 predicate 部分以外的完全相同的结果,我将在以后将这个逻辑与其他大表一起使用。
使用substr查询1
SELECT id, url
FROM table
WHERE order = 0
... -- some more AND filter
AND substr(string_field, -9) = "_end_with";
与
查询2使用like:
SELECT id, url
FROM table
WHERE order = 0
... -- some more AND filter
AND string_field LIKE "%\_end_with";
1条答案
按热度按时间ohtdti5x1#
对于这种类型的问题,您需要测试在您的环境中哪个对您的数据性能更好。
第二,两者并不等同,因为
_
是中的通配符LIKE
表达。所以LIKE
将匹配!end!with
例如。不过,我还要补充一点,我希望他们也有类似的表现。两者都必须读取表中的所有数据并运行某种类型的字符串比较。读取数据通常是这样的查询中最昂贵的部分。
可能会有一些额外的开销
LIKE
,尤其是因为它处理的是三个通配符而不是一个通配符。但请记住LIKE
是一个内置的操作符,为了在sql引擎中提高效率,已经做了几十年的努力。就我个人而言,我会用
LIKE
不管任何小的性能问题。我花了很多时间调试查询,在那里我改变了我正在寻找的模式——并且错误地计算了字符。无论两种方法之间存在什么差异,查询中的错误对性能的影响都要大得多。