does this occur with a raw mysqlconnect script ?  if so, how about a MySQLdb 
version of the same thing ?  start looking at the DBAPI.


On Jul 25, 2012, at 3:45 AM, Warwick Prince wrote:

> I have taken the SQL entered into the MySQL Workbench (see below) and run 
> that same SQL directly as a string in engine.execute(bla).   Times are still 
> way different;  See below.
> 
> Workbench times are bottom right.
> 
> <PastedGraphic-6.png>
> 
> 
> Now a raw query running on the same server in the console of PyCharm IDE.  
> It's over 3 minutes..
> 
> 
> <PastedGraphic-7.png>
> 
> I removed the Date range where clause, and the results were almost line-ball. 
>  225 seconds on Workbench, and 228 in engine.execute().   That would tend to 
> indicate that the bad query is somehow not using the date index and is 
> looking through every row??   Given that the final results are actually 
> correct, it must be recognising the date values in the select OK, so I don't 
> get it!  (I added a USE INDEX later to the same query and no change).
> 
> What next?
> 
> On 25/07/2012, at 2:02 PM, Michael Bayer wrote:
> 
>> One difference that exists here is the usage of bound parameters, which I'm 
>> assuming you're not using when you run the query in the console.  What 
>> happens if you run a test script with straight mysqlconnector ?      Try 
>> with and without the bound parameters.
>> 
>> 
>> 
>> On Jul 24, 2012, at 11:50 PM, Warwick Prince wrote:
>> 
>>> 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.
>> 
>> 
>> -- 
>> 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.
> 
> 
> -- 
> 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.

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