Yes and no.  It takes a lot of experience to get beyond what EXPLAIN gives us.  
EXPLAIN says what it does, but usually one wants to know "what to do".  To that 
end, I have written some tips:
http://mysql.rjweb.org/doc.php/ricksrots
http://mysql.rjweb.org/doc.php/index1
But if you have one of the classic "problems", you need to think out of the 
box.  Examples:  EAV, Pagination, Big deletes, nearest pizza parlors, lat/long 
searching, latest news articles, UUID indexing, picking a random row.  The 
above links lead to other pages that discuss efficient approaches to those 
gnarly tasks.

I find Profiling to be useless, since it seems to always have 95% of the time 
is in "copying"; this says nothing actionable.

EXPLAIN is useful in confirming that the query will be executed in the way you 
think it ought to be -- Using this index or that, hitting the tables in a 
particular order, "Using index" (meaning that the data did not need to be 
touched), "Using join buffer" (often bad).  I repeatedly tell people that 
"using filesort/temp-table" is not necessarily evil; think what it must take to 
do
   GROUP BY z ORDER BY x

If you want an analysis of a particular query, please provide
SHOW CREATE TABLE -- for engine, datatypes, and indexes
SHOW TABLE STATUS -- for size
EXPLAIN SELECT -- for what the optimizer's plan
EXPLAIN PARTITIONS SELECT -- if partitioned.

Oh, another note...  Akiban's EXPLAIN is far more detailed than MySQL's.  (But 
then, it is doing some tricky things.)


> -----Original Message-----
> From: Cabbar Duzayak [mailto:cab...@gmail.com]
> Sent: Thursday, November 22, 2012 12:45 AM
> To: mysql@lists.mysql.com
> Subject: Re: Query Plan Analyzer
> 
> Is this a joke?
> 
> On Thu, Nov 22, 2012 at 10:20 AM, Zhigang Zhang
> <zzgang2...@gmail.com>wrote:
> 
> > By experience!
> >
> > -----Original Message-----
> > From: Cabbar Duzayak [mailto:cab...@gmail.com]
> > Sent: Thursday, November 22, 2012 3:13 PM
> > To: mysql@lists.mysql.com
> > Subject: Query Plan Analyzer
> >
> > Hi All,
> >
> > Is there a way of looking at how mysql builds the query plan and
> > executes it for a given query? EXPLAIN is definitely a useful tool,
> > but it is not exact (shows approximations as far as I can see),
> > furthermore I want something like how the predicates were applied
> > (before or after JOINS), which indexes were used, etc.
> >
> > Basically, Oracle's EXPLAIN PLAN and SQL TRACE do this, and it is
> very
> > very useful for optimizing queries. Don't get me wrong, I love mysql,
> > but with mysql, you optimize queries more by trial and error, instead
> > of understanding what exactly is going on.
> >
> > Thanks a ton.
> >
> >

--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/mysql

Reply via email to