【已解决】前缀索引有 36 字节和遇到字符就截断的限制,有办法调大、不截断吗?

Viewed 85

目前我有个 Unique 表,前三个字段是 cdate(时间类型)、id(数字类型)、a(字符串 20 字节)作为了 Key 列,假设还有其他 Value 列字段 b(字符串 20 字节)

但业务上既有

Select * from t where a='xxxxx'

又有

Select * from t where b='xxxxx'

做筛选的查询的话,有什么解决办法吗?(现状已经是 用 a 做筛选比 b 快一个数量级以上了小几十倍)

题外话:
另外也是想咨询下前缀索引的细节

  • Q1: 如果限制 36 字节,如果变长字符串字段 str( 50 字节) 作为前缀索引,Select * from t where str='xxxxx' 的操作,是所有这种查询均变慢,还是说仅 xxxxx 实际值长于 36 字节的记录查询变慢了呢?
  • Q2: 前缀索引 36 字节上限能手工调整吗?
  • Q3: 前缀索引有办法支持多个字符串字段吗?
1 Answers

目前前缀索引无法调整:将一行数据的前 36 个字节 作为这行数据的前缀索引,当遇到 VARCHAR 类型时,前缀索引会直接截断。
如果是MOR的Unique表可以通过建物化视图,去调整字段顺序从而优化前缀索引;
如果是MOW的Unique表可以考虑建其它索引看能否优化加速,比如给b创个倒排索引。