TiDB是否集成实现了类似PG的虚拟索引HypoPG的相关功能?
应该是没有虚拟索引。
目前还没有,这是什么应用场景的需求呢?
不了解PG的虚拟索引是啥样的,不知道你想说的是不是下面这个。
TiDB 生成列(虚拟列),这个虚拟列可以建索引。
生成列包括存储生成列和虚拟生成列。存储生成列会将计算得到的值存储起来,在读取时不需要重新计算。虚拟生成列不会存储其值,在读取时会重新计算。存储生成列和虚拟生成列相比,前者在读取时性能更好,但是要占用更多的磁盘空间。
无论是存储生成列还是虚拟列,都可以在其上面建立索引。
https://docs.pingcap.com/zh/tidb/stable/generated-columns#生成列的基本概念
– HypoPG 虚拟索引是一个 PostgreSQL 扩展,它提供了一种在数据库中创建和使用虚拟索引的方式。虚拟索引并不实际存储数据,而是通过在查询过程中模拟索引的行为来提高查询性能。
TiDB 无类似的功能,如果是要评估索引是否有作用,是否可以用 Invisible Indexes 近似实现?
没有,没那么实用
invisible index 也得需要先建索引,然后实则Invisible,invisible后优化器就用不上了
你们是要从 pg 迁移到 tidb 么?
嗯呢,但毕竟是没有。we are in the Mysql family
是不是除了PG,现在主流的DBMS都不支持虚拟索引的功能呢?
oracle有virtual index 其他数据库没有,看起来有点鸡肋
我觉得这个扩展功能能够避免真正建索引的overhead,还挺有用的?
不建也用不了,和没有也没区别
如果候选集合很大的话,可以用这个初步筛掉没有用的吧
先说一下答案,TiDB确实不支持这个插件,MySQL也没有这个功能。不过虽然不能模拟加索引,但是支持模拟索引不可见
另外看了一下HypoPG这个插件的功能,就是提供一个模拟索引的功能,用来校验一下索引是不是对某类查询有效。
额,怎么说呢,这个功能真的是比较鸡肋,虽然确实可以在不用真正创建索引的情况下,来验证索引是否有效。但是一般来说,索引需要注意的点其实并不多,只要找到where条件里哪个列的筛选性比较就可以了,和你逐个列创建虚拟索引是一样的效果。(其实你看这个插件的Star也就知道了,还不过千。。)
列的选择性,特别是复杂谓词,应该也很难计算吧?或者TiDB有相关的功能支撑吗?
学习了
第二张截图