Discussions
Categories
- 196.9K All Categories
- 2.2K Data
- 239 Big Data Appliance
- 1.9K Data Science
- 450.3K Databases
- 221.7K General Database Discussions
- 3.8K Java and JavaScript in the Database
- 31 Multilingual Engine
- 550 MySQL Community Space
- 478 NoSQL Database
- 7.9K Oracle Database Express Edition (XE)
- 3K ORDS, SODA & JSON in the Database
- 545 SQLcl
- 4K SQL Developer Data Modeler
- 187K SQL & PL/SQL
- 21.3K SQL Developer
- 295.9K Development
- 17 Developer Projects
- 138 Programming Languages
- 292.6K Development Tools
- 107 DevOps
- 3.1K QA/Testing
- 646K Java
- 28 Java Learning Subscription
- 37K Database Connectivity
- 155 Java Community Process
- 105 Java 25
- 22.1K Java APIs
- 138.1K Java Development Tools
- 165.3K Java EE (Java Enterprise Edition)
- 18 Java Essentials
- 160 Java 8 Questions
- 86K Java Programming
- 80 Java Puzzle Ball
- 65.1K New To Java
- 1.7K Training / Learning / Certification
- 13.8K Java HotSpot Virtual Machine
- 94.3K Java SE
- 13.8K Java Security
- 204 Java User Groups
- 24 JavaScript - Nashorn
- Programs
- 440 LiveLabs
- 38 Workshops
- 10.2K Software
- 6.7K Berkeley DB Family
- 3.5K JHeadstart
- 5.7K Other Languages
- 2.3K Chinese
- 171 Deutsche Oracle Community
- 1.1K Español
- 1.9K Japanese
- 232 Portuguese
Wrong execution path
Query going slow through cx_oracle
select ...
from big_table a, small_table b
where a.col1= :bind1
and a.col2 = :bind2
and a.col3 = :bind3
and a.col4 = :bind4
and a.col5 = b.col1
This query, when executed via SQLPLUS uses nested loops=>big table rowid via index range scan, with small table rowid index unique scan. Perfect, and very fast.
When going through python, it does a full table scan on big_table nested loops to the index unique scan on small-table.
Even with hint /*+ INDEX(a ix_on_those_columns) */, the query from python does a full table scan against the oracle table.
The statistics are up to date on the objects.
What could be causing this?
Thanks,
select ...
from big_table a, small_table b
where a.col1= :bind1
and a.col2 = :bind2
and a.col3 = :bind3
and a.col4 = :bind4
and a.col5 = b.col1
This query, when executed via SQLPLUS uses nested loops=>big table rowid via index range scan, with small table rowid index unique scan. Perfect, and very fast.
When going through python, it does a full table scan on big_table nested loops to the index unique scan on small-table.
Even with hint /*+ INDEX(a ix_on_those_columns) */, the query from python does a full table scan against the oracle table.
The statistics are up to date on the objects.
What could be causing this?
Thanks,
Answers
-
Try adding...
conn.cursor().execute("alter session set events '10046 trace name context forever, level 12'")
...before you execute the query. Format the trace file using tkprof and the issue will usually jump out at you.
HTH,
Steve
This discussion has been closed.