like关联改写

1、 等价转换

instr:字符串查找函数

css 复制代码
INSTR(string, substring [, start_position [, occurrence [, return_option]]])
string: 源字符串
substring: 要查找的子串
start_position: 可选,开始搜索的位置(默认1,负数表示从末尾开始)
occurrence: 可选,指定查找第几次出现(默认1)
return_option: 可选,0=返回子串起始位置,1=返回子串结束位置

substr: 字符串截取函数

css 复制代码
SUBSTR(string, start_position [, length])
string: 源字符串
start_position: 开始位置(正数从开头,负数从末尾)
length: 可选,要截取的长度(默认到字符串结尾)

LIKE:模糊匹配

其三者之间的转换

2、 问题语句

这里问题在于驱动表为t2,index join次数100万次,前面说过与substr和instr可以等价转换,这里想要转换驱动表,那么就需要用substr。

3、 改写

这里与预期的一样驱动表变为t1表,index join次数降下来,另外注意的是,susbtr获取定长的情况下才做index join,因此这里结合业务可以知道是获取4个字节长度。执行时间从原来的10s下降到0.5s

如果是不定长,大家可以感受一下

这里没有做成index join,而是做成nest loop,反而效率下降了。

4、 小结

(1)Like、substr和instr之间可以相互转换。

(2)substr获取是定长的字符串时可以利用索引做索引连接。

(3)性能优化改写主要是针对问题去找到更加高效的方法去实现。

相关推荐
zcn1268 天前
OR关联改写经验
sql优化改写
zcn1262 个月前
标量子查询优化(二)
sql优化改写