IBM DB2支持selectivity clause以提供附加的选择性信息和基本谓词来帮助查询优化:
selective子句只能与基本谓词一起使用(如
在SQL引用中定义),而不是LIKE或BETWEEN之类的谓词。
较低的选择性值(非常小的数字)将告诉DB2
谓词将限定更少的行(并鼓励使用索引
在该列中定义)。较高的选择性值(接近1)将
意思正好相反。
来自documentation的一个例子:

SELECT c1, c2, c3, FROM T1, T2, T3
        WHERE T1.x = T2.x AND
        T2.y=T3.y AND
        T1.x >= ? selectivity 0.00001 AND
        T2.y > ? selectivity 0.5 AND
        T3.z = ? selectivity 0.2 AND
        T3.w = ?

我正在PostgreSQL中寻找一个类似的特性,通过这个特性,我们可以将每个谓词的选择性,或者至少是关系级的选择性直接作为查询的一部分注入。是否存在一个?或者这方面有什么进展吗?如果没有正在进行的工作,我应该如何开始实现这个功能?
附加说明:选择性=基数/(记录数)。谓词诱导的选择性是表中满足谓词的元组的分数。关系的选择性取决于查询中涉及关系的所有谓词的选择性。

最佳答案

我正在PostgreSQL中寻找一个类似的特性,通过这个特性,我们可以将每个谓词的选择性,或者至少是关系级的选择性直接作为查询的一部分注入。是否存在一个?
对接线员来说,没有什么比这更好的了。
对于表,您可以修改pg_statistic,但这只允许您在stats模型提供的限制内伪造stats。Ror示例,因为PostgreSQL不试图识别列间关联,所以它没有地方存储这样的信息,也没有方法查找它。
这方面有没有正在进行的工作?
我不知道。一篇pgsql黑客邮件列表的文章可能会找到更多信息。
如果没有正在进行的工作,我应该如何开始实现这个功能?
再说一次,我会在pgsql黑客身上提出来。不过,在这样做之前,先阅读一下PostgreSQL社区关于查询提示的策略。
有成本暗示(参见COST术语CREATE FUNCTION)和覆盖ANALYZE中的估算的先例。因此,我认为您应该能够在这里进行一些牵引,尽管您应该期望大量的自行车脱落语法。

关于sql - 是否有一个选择性条款可以在PostgreSQL中直接注入(inject)选择性,类似于IBM DB2,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24980182/

10-13 08:54