Hi All

This is addressed to anyone who may be able to shed some light on this strange 
behaviour;

I'm running MySQL on Windows 2003 Server (Sorry) and have a table that has ~2M 
rows of sales data in it.   Knowing the type of BI queries I would want to be 
doing, I have added indexes where I feel they would help.  I tested the queries 
I wanted to perform manually by directly entering the SQL into the MySQL 
console.  Results were fine. (Tested by putting raw SQL into MySQL Workbench on 
the same server as the database)

I then simply moved the logic into my code, and created very simple queries on 
tables using the table.select() syntax, and adding a few basic group_by and 
'where' additions.   All works perfectly, and I get exactly the same results as 
my manual query BUT...  the manual query returns the results in 3 seconds, and 
the programatic query returns the results in 200+ seconds!!  This is the round 
trip time from .execute() 'til the next line of code being hit. i.e. I have 
fetched nothing yet.

This is what I have done;

I added an audit line in my code to show the final SQL that was being emitted, 
then cut and paste that into MySQL Workbench and executed it.  < 3 seconds was 
the result, with exactly the same actual rows being returned.
The Python code is running on the same server as the MySQL Console.
I have created the same query manually on the Python console, using the 
sqlalchemy constructs like query=table.select() etc and run it there - 180+ 
seconds again - it's I've basically eliminated by code.
I'm using 'mysqlconnector' which I have had no problems in the past, and it's 
not like I'm hammering it with 1000's of queries - just 1 query that will 
return around 12 rows (having processed several 1000 and then GROUPed them).   
I can see the query sitting there in Workbench, taking minutes to complete.
I've tried adding index hints just in case..  Made no difference, as it should 
have been using that index anyway..
When creating the SQLAlchemy test query, (and indeed in my real code) I used 
all defaults for engine, metadata etc with no additional settings at all.
Finally, to add insult to injury, I can execute the identical manual query 
DURING the slow queries execution, and still get it back < 3 seconds.. whilst 
the slow one clunks along and spits out the same result minutes later.
In the SQL below, invoice and customer are VARCHAR columns, whilst date is DATE 
and TotalEx is FLOAT
I have restarted the MySQL Service (several times)
It's *like* the sqlalchemy query is not allowed to use any of the indexes, and 
is trawling through all the data..  Are there permissions or something on using 
an index that I don't know about?  (Both queries are being executed by the same 
user - root)
It is EXACTLY the same query in all ways, and in fact is an extremely simple 
query - as below;

SELECT sum(`sales_data`.`TotalEx`) AS totalSales, date, invoice, customer 
FROM sales_data USE INDEX(idx_date) 
WHERE date >="2011-12-01" AND date <="2012-07-31"
GROUP BY customer, invoice

Any clues?  My project just fell in a hole!

Thanks an advance for any pointers.
Warwick

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalchemy@googlegroups.com.
To unsubscribe from this group, send email to 
sqlalchemy+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.

Reply via email to