Shawn, Thanks for the great help! It still is not working. I did an EXPLAIN on this query with your amended split out join statements and got this:
+----+-------------+-------+-------+---------------+------------+---------+------+--------+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------+-------+---------------+------------+---------+------+--------+-------------+ | 1 | SIMPLE | a | range | apptdate | apptdate | 4 | NULL | 296148 | Using where | | 1 | SIMPLE | p | ALL | NULL | NULL | NULL | NULL | 262462 | | | 1 | SIMPLE | t | ALL | NULL | NULL | NULL | NULL | 311152 | | | 1 | SIMPLE | c | ref | IdApptType | IdApptType | 51 | func | 1 | | | 1 | SIMPLE | af | ALL | NULL | NULL | NULL | NULL | 5680 | | +----+-------------+-------+-------+---------------+------------+---------+------+--------+-------------+ What I'm not catching is why it says there is no key it can use for the patient table; here is a portion of the show create: PRIMARY KEY (`zzk`), KEY `IdPatient` (`IdPatient`), KEY `SSN` (`SSN`), KEY `IdLastword` (`IdLastword`), KEY `DOB` (`DateOfBirth`), KEY `NameFirst` (`NameFirst`), KEY `NameLast` (`NameLast`) So, the IdPatient is at least a POSSIBLE key, right? On Mar 9, 2011, at 8:34 PM, Shawn Green (MySQL) wrote: > Hi Jim, > > On 3/9/2011 17:57, Jim McNeely wrote: >> I am trying to set up an export query which is executing very slowly, and I >> was hoping I could get some help. Here is the query: >> >> SELECT a.IdAppt, a.IdPatient, >> p.NameLast, p.NameFirst, p.NameMI, >> a.IdProcedure, a.ProcName, CAST(CONCAT(a.ApptDate, " ", a.ApptTimeOut) AS >> CHAR) >> ApptDateTime, a.ApptLenMin Duration, >> a.Room Primary_Resource_ID, 'R' as Primary_Resource_Type, >> t.Note, c.IdPractAffil DoctorID, af.PractName DoctorName, a.ICD9code ICD9, >> '??????' Diagnosis_free_test >> >> from Appt_ a LEFT JOIN (patient_ p, today_ t, Copy_ c, Affil_ af) >> ON (a.IdPatient = p.IdPatient >> AND a.IdPatientDate = t.IdPatientDate >> AND CONCAT(a.IdAppt, '0') = c.IdApptType >> AND a.IdPriCarePhy = af.IdAffil) >> WHERE a.ApptDate>= '2009-03-01'; >> >> p.IdPatient, t.IdPatientDate, c.IdApptType, and af.IdAffil are all indexed. >> Also I selectively took out join parameters until there was nothing but a >> join on the patient table, and it was still slow, but when I took that out, >> the query was extremely fast. What might I be doing wrong? >> >> Thanks, >> >> Jim McNeely > > The performance problem is with your Cartesian product. I think you meant to > write: > > from Appt_ a > LEFT JOIN patient_ p > ON a.IdPatient = p.IdPatient > LEFT JOIN today_ t > ON a.IdPatientDate = t.IdPatientDate > LEFT JOIN Copy_ c > ON CONCAT(a.IdAppt, '0') = c.IdApptType > LEFT JOIN Affil_ af > ON a.IdPriCarePhy = af.IdAffil > > As of 5.0.12, the comma operator for table joins was demoted in the 'order of > precedence' for query execution. That means that MySQL became more complaint > with the SQL standard but it also means that using a comma-join instead of an > explicit ANSI join can result in a Cartesian product more frequently. > > Try my style and compare how it works. If both styles are similarly slow, > collect the EXPLAIN plan for this query and share with the list. > > Yours, > -- > Shawn Green > MySQL Principal Technical Support Engineer > Oracle USA, Inc. - Hardware and Software, Engineered to Work Together. > Office: Blountville, TN > > -- > MySQL General Mailing List > For list archives: http://lists.mysql.com/mysql > To unsubscribe: http://lists.mysql.com/mysql?unsub=j...@newcenturydata.com >