我有一个SQL语句
select * from tb_name where field like 'abc_def_ghj%';
可以和
select * from tb_name where field like 'abc_def_ghj_defg%;
(可能有很多以 abc_def_qhj 开头的字段值;
从第 12 个字母完全不同)。
我想知道索引字段是否有特殊长度,例如,只有字段(0,10)用于前十个字母效果;
(我假设你有INDEX(field)
?
如果只有一小部分行与此匹配,则速度很快:
like 'abc_def_ghj_defg%
如果大部分行与此匹配,则速度很慢:
like 'abc_def_ghj%'
速度差异与长度关系不大,只是与匹配的行数有关。
如果排序规则..._ci
,则大写和小写相互匹配。
请注意,下划线(_
)是通配符。
计时时,请务必运行两次查询。 缓存可以产生很大的不同。
是的,MySQL中索引键的长度有限制。
来自"15.22 InnoDB 限制"(假设您使用 InnoDB 作为存储引擎,因为它是当今最流行的):
对于使用
InnoDB
DYNAMIC
或COMPRESSED
行格式。对于使用
InnoDB
REDUNDANT
或COMPACT
行格式。例如,您可能会使用列达到此限制 前缀TEXT
或VARCHAR
列上超过 191 个字符的索引, 假设一个utf8mb4
字符集,每个字符集最多 4 个字节 字符。尝试使用超过限制的索引键前缀长度将返回错误。
如果减小
InnoDB
页面大小 到 8KB 或 4KB,方法是指定innodb_page_size
选项,创建 MySQL 实例时,最大长度 索引键根据 3072 字节的限制按比例降低 对于 16KB 的页面大小。也就是说,最大索引键长度为 1536 页面大小为 8KB 时为字节,页面大小为 768 字节 4KB。适用于索引键前缀的限制也适用于全列索引键。