我以一种非常规的方式使用IN操作符,在左侧使用文字值,在右侧使用列
因此,而不是:
(table1.id = 123 OR table2.id = 123 OR table3.id = 123)
我用途:
123 IN (table1.id, table2.id, table3.id)
但是,我觉得它有点不好,因为它不是一个常见的用法,所以数据库实现可能没有针对它进行调优。通常,左侧是列名,右侧是动态文字值的可变大小列表。
我正在使用PostgreSQL,没有发现任何问题。
有没有人可以分享他的经验,如果这种用法会导致问题?
2条答案
按热度按时间5w9g7ksd1#
您永远不能排除bug的可能性,但在这种情况下,我也不会预先担心它们。我很惊讶地看到,当同一个表中有多个列时,使用BitmapOr的最明显的优化仍然应用于IN列表。(当它们不在同一个表中时,我不认为任何一种编写方式都能得到很好的优化。
我可能会避免这种编写方式,这是为了那些需要阅读我的代码的人,而不是为了计算机。但如果涉及的常数比“123”长得多,也许避免重复就值得非常规编码。
daupos2t2#