首页 > 解决方案 > 为什么使用文字进行 Pandas Oracle DB 查询更快?

问题描述

当我使用此处找到的绑定变量方法时:https ://cx-oracle.readthedocs.io/en/latest/user_guide/bind.html#bind 和此处:Python cx_Oracle 绑定变量 我的查询大约需要 8 分钟,但是当我使用硬编码值(文字),大约需要 20 秒。

我正在努力理解“幕后”发生的事情(变量/内存访问/数据传输/查询解析),看看是否有任何方法可以让我坚持使用绑定变量的推荐方法并获得相同的结果~ 20多岁的表现。

这个 python 脚本将是自动化的,并且值将是动态的,所以我绝对不能使用硬编码的值。

技术背景:Python 3.6;甲骨文 11g;cx_Oracle 8

---- python部分代码-----

第一个版本
param_dict = {“startDate:”01-Jul-21”, “endDate:”31-Jul-2021”}

conn = (typical database connection code….)

cur = conn.cursor()

###### this query has the bind variables and param_dict keys match bind variable aliases; runtime ~480s (8mins)
cur_df = pandas.DataFrame(cur.execute("inserted_query_here", param_dict))
第二版
conn = (typical database connection code….)

cur = conn.cursor()

###### this query has the hardcoded values (literals); runtime ~20s
cur_df = pandas.DataFrame(cur.execute("inserted_query_here"))

标签: pythonpandascx-oracle

解决方案


@ChristopherJones 和 Alex 感谢您引用的文章。通过彻底检查解释计划,我已经能够解决这个问题。执行得更快的查询没有使用索引(更快地进行全表扫描);另一个是(绑定查询的变量版本)。

我相应地应用了 NO_INDEX 提示,现在对于查询的绑定变量版本有大约 20 秒的结果。


推荐阅读