I'd try to see on the cx_oracle list if you can produce a self-contained cx_Oracle-only test case and illustrate that indexes are not being used...I think this comes up a lot over there it's like an OCI thing.


On 09/12/2016 03:20 PM, Thierry Florac wrote:
Hi Mike,

I really agrea with you on all the points you mentionned. And I won't
add anything about the cost of an Oracle database license and
administrators compared with their performances! But I actually don't
have the choice...  :-/
My problem is clearly a database problem at first! But as my DBA can't
find any solution to it, I'm just trying to find a bypass on the ORM side.
I definitively agree with SA ORM's way of handling all this. I was quite
sure in fact that there was no easy way to bypass the ORM...

Thanks anyway,
Thierry

2016-09-12 20:53 GMT+02:00 Mike Bayer <mike...@zzzcomputing.com
<mailto:mike...@zzzcomputing.com>>:



    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%2bunsubscr...@googlegroups.com>
        <mailto:sqlalchemy+unsubscr...@googlegroups.com
        <mailto:sqlalchemy%2bunsubscr...@googlegroups.com>>.
        To post to this group, send email to sqlalchemy@googlegroups.com
        <mailto:sqlalchemy@googlegroups.com>
        <mailto:sqlalchemy@googlegroups.com
        <mailto:sqlalchemy@googlegroups.com>>.
        Visit this group at https://groups.google.com/group/sqlalchemy
        <https://groups.google.com/group/sqlalchemy>.
        For more options, visit https://groups.google.com/d/optout
        <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
    <mailto:sqlalchemy%2bunsubscr...@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
    <https://groups.google.com/group/sqlalchemy>.
    For more options, visit https://groups.google.com/d/optout
    <https://groups.google.com/d/optout>.




--
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