如果我有TEXT个数据类型(最多65,535个字符),取前500个字符会比取整列快吗?有一个Left函数特别适用于这种情况,但我想知道它是提高了性能还是降低了它的级别,因为它毕竟是一个函数.
如果我有TEXT个数据类型(最多65,535个字符),取前500个字符会比取整列快吗?有一个Left函数特别适用于这种情况,但我想知道它是提高了性能还是降低了它的级别,因为它毕竟是一个函数.
InnoDB存储引擎必须读取全文内容.函数LEFT()
对完整的字符串进行操作.它没有任何方法告诉存储引擎只读取字符串的一部分.
在RDBMS中,函数非常了解存储格式,像LEFT()
这样的字符串函数可以通过巧妙的方式进行优化.
但是MySQL有一个独特的插件架构来实现各种各样的存储引擎.存储代码与诸如内置字符串函数之类的存储无关的东西是分开的.因此字符串函数没有机会请求文本列的一部分.
实现MySQL的LEFT()
函数的代码如下:https://github.com/mysql/mysql-server/blob/8.0/sql/item_strfunc.cc#L1443-L1461
唯一的优化是它判断字符串的长度.如果字符串已经比请求的子字符串短,则只返回整个字符串.这意味着必须有完整的字符串才能判断长度.