有没有办法告诉knex.js不要使用参数绑定?而是将值注入到原始查询中?
我们目前在以Oracle为数据库的Node.js环境中使用knex.js。我们遇到了查询性能不佳的情况,并将范围缩小到分区表上的参数绑定。
我们的表在CREATE_DATE列上进行了分区,并且knex.js正在生成如下所示的查询:
select col1, col2 from my_table where create_date >= ? and create_date < ?如果我理解了Oracle文档,并且根据一些测试,Oracle在这种情况下使用了动态剪枝,并且给我们带来了一些非常糟糕的性能。如果我像这样手动重新运行查询,它会非常快:
select col1, col2 from my_table where create_date >= to_date('2020-05-20', 'YYYY-MM-DD') and create_date < to_date('2020-05-21', 'YYYY-MM-DD')在这两个查询上运行explain plan会产生截然不同的性能结果。第一种方法的成本比第二种方法高得多。
有没有办法告诉knex.js使用文字值而不是使用参数绑定?
发布于 2020-05-22 21:02:37
因为Knex是一个查询构建器,所以它有一种方法来传递raw query或其中的一部分。
knex('my_table')
.columns('col1', 'col2')
.whereRaw("create_date >= to_date('2020-05-20', 'YYYY-MM-DD')")
.whereRaw("create_date < to_date('2020-05-21', 'YYYY-MM-DD')");https://stackoverflow.com/questions/61954365
复制相似问题