On 09/12/2016 09:11 AM, Thierry Florac wrote:
Hi,

I'm working with an Oracle database which, for a reason I can't
understand, doesn't want to use indexes when working on a given table
(which is quite large) with prepared statements!
I know I can use literal columns when running "select" queries (using
the "literal_column" function), so that selects performances are good,
but is there a way to use such literals while performing updates ou
deletes through the ORM using sessions?

Three general stanzas on this:


If we are talking about the UPDATE / DELETE statements within the ORM flush(), that would be extremely hard to trick the ORM into doing that correctly; getting the bound parameters to render as literals would be doable but the ORM really wants to batch those statements together, which would have to also be turned off and there's no public entryway to that.

Next, brute force via the do_executemany() / do_execute() dialect events which give you direct access to the cx_Oracle cursor. You'd need to break the list of parameters sent to executemany() into multiple single execute() calls and rewrite all the parameters. This will get you the effect you want at the expense of much ugliness.

Third. The ORM's UPDATE/DELETE statements only use the primary key in the WHERE clause, not any other columns. if your Oracle DB can't even index by primary key on prepared statement that is really something that is likely fixable on the database side. Your employer (or yourself, if this is your own company) is likely paying hundreds of thousands of $$ per year to be able to use Oracle in the first place, and if your Oracle DB can't look up a record by primary key using the index, something is seriously broken with it. Oracle is pretty bad in this area but this one should not be the case; I'd advise at least checking on the cx_Oracle list why your Oracle DB is bypassing indexes for prepared statements.






Best regards,
Thierry
--
http://www.imagesdusport.com -- http://www.ztfy.org

--
You received this message because you are subscribed to the Google
Groups "sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send
an email to sqlalchemy+unsubscr...@googlegroups.com
<mailto:sqlalchemy+unsubscr...@googlegroups.com>.
To post to this group, send email to sqlalchemy@googlegroups.com
<mailto:sqlalchemy@googlegroups.com>.
Visit this group at https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

--
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to