|  | Posted by Boris Stumm on 10/05/07 08:18 
Brian wrote:
 > The 2 main tables are "orders" and "productslist" The orders table has
 > 7000000 (yes that is 6 million) records and the productslist has 6000, all
 > search fields have been indexed, the whole DB have 25 tables
 
 Does "search fields" include the "prod_code" field? try indexing this
 in both tables. Anyways, what do you mean with "search fields"? According
 to the query, you should try indexes on p.prod_code, o.prod_code,
 o.timestamp and o.status.
 
 
 > The users select the search criteria, summits the form and the below PHP
 > code it run , it can take upwards of 20 mins to return the results. So my
 > question is, is there anything wrong with my code or the way I and running
 > this,  or have I just hit the limit of MySQL
 
 I do not know MySQL, but I can hardly believe you hit a limit of MySQL with
 this. After all, it claims itself to be a fast DBMS.
 
 
 > $query  = "SELECT p.prod_code, p.description, SUM(o.`ord` ) AS totalor,
 > SUM(o.`del` ) AS totaldel, SUM(o.`total_cost_price`) AS totalcostprice,
 > SUM(o.`total_invoice_price`) AS totalinvoiceprice FROM productslist AS p
 > LEFT OUTER JOIN orders AS o ON ( p.prod_code = o.prod_code AND o.timestamp
 >  >= $sdate AND o.timestamp <= $edate AND o.status <> "p" AND (status NOT
 >  >IN
 > ("u")) AND (status NOT IN ("n")) ) GROUP BY p.prod_code ORDER BY
 > p.prod_code";
 
 $query = "
 SELECT
 p.prod_code, p.description, SUM(o.`ord` ) AS totalor,
 SUM(o.`del`) AS totaldel, SUM(o.`total_cost_price`) AS totalcostprice,
 SUM(o.`total_invoice_price`) AS totalinvoiceprice
 FROM
 productslist AS p LEFT OUTER JOIN
 orders AS o
 ON (p.prod_code = o.prod_code AND
 o.timestamp >= $sdate AND
 o.timestamp <= $edate AND
 o.status not in ("p", "u", "n"))
 GROUP BY
 p.prod_code
 ORDER BY
 p.prod_code
 ";
 
 I transformated the query to a bit more readable form. Consider doing
 this next time (also with your php code) if you want answers to your
 questions.
  Navigation: [Reply to this message] |