Re: SELECT Performance and INDEXing

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Thanks for your reply.  Here are the results of EXPLAIN:

EXPLAIN SELECT field1, field2, andUpToField10
FROM theTable
WHERE field2 = 1
OR field1 = 1
OR field1 = 2
ORDER BY field1 ASC

id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE theTable ALL PRIMARY,field2 NULL NULL NULL 6400 Using where; Using filesort

===========================================================================
Here are the results of EXPLAIN on the separate statements:

EXPLAIN SELECT field1, field2, andUpToField10
FROM theTable
WHERE field1 =1
OR field1 =2
ORDER BY field1 ASC

id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE theTable range PRIMARY PRIMARY 8 NULL 2 Using where

----------------------------------------------------------------------------------------------------------------------
EXPLAIN SELECT field1, field2, andUpToField10
FROM theTable
WHERE field2 =1
ORDER BY field1 ASC

id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE theTable ref field2 field2 9 const 10 Using where; Using filesort


----- Original Message ----- From: "Micah Stevens" <micah@xxxxxxxxxxxxxxxxxx>
To: <php-db@xxxxxxxxxxxxx>
Sent: Thursday, August 18, 2005 9:49 AM
Subject: Re:  SELECT Performance and INDEXing



I think no one answered it because it doesn't make a whole lot of sense.
Breaking a condition out into a second SQL statement would force the DB to
rescan the table, so it should take longer rather than shorter. There's
nothing suggesting that it's doing an internal self-join or other
time-consuming function off the bat, which might explain it.

Granted a second query would benefit from caching from the first to some
degree.

Can you run EXPLAIN on the first statement and post the results?

-Micah

On Thursday 18 August 2005 1:02 pm, Dwight Altman wrote:
Hey, this is my first question.  So if you could just reply to say it
reached the php-db list, that would be terrific. Of course, answering the
questions would be awesome as well.

> I meant
> 'Analyze table'
> and
> 'the composite key "field2 field3" would be unique'
>
> ----- Original Message -----
> From: "Dwight Altman" <dwight@xxxxxxxxxxxx>
> To: <php-db@xxxxxxxxxxxxx>
> Sent: Wednesday, August 10, 2005 4:23 PM
> Subject:  SELECT Performance and INDEXing
>
>
> I have a MyISAM table holding images with field types bigint(20),
> mediumblob, varchar(255), blob and tinyint(3).  The table has grown to
> over
> 800 MB and over 6,000 rows. In the past week, performance has been > about
> 15-20 seconds to run the following select statement which pulls only 16
> maximum rows:
>
> SQL1) SELECT field1, field2, andUpToField10 FROM theTable WHERE field2 > =
> $aField2Value OR field1 = 1 OR field1 = 2 ORDER BY field1 ASC
>
> Basically I always pull the first 2 images in the table via the primary
> key
> field1 and upto 14 additional images depending on a foreign key field2.
> field2 can have up to 14 repeated/duplicate entries.
>
> My working solution is that I have since split this into 2 select
> statements:
> SQL2) SELECT field1, field2, andUptoField10 FROM theTable WHERE field1 > =
> 1 OR field1 = 2 ORDER BY field1 ASC
> SQL3) SELECT field1, field2, andUptoField10 FROM theTable WHERE field2 > =
> $aField2Value ORDER BY field1 ASC
> and performance is back to "instantaneous" (as far as web > responsiveness
> is
> concerned).
>
> Can someone explain why SQL1 took so long to run as compared with > running
> SQL2 and SQL3 ?
>
> Before splitting the statements, I also tried from phpmyadmin (Check
> table,
> Aalyze table, Optimize table) and creating an INDEX on field2, but I
> noticed
> no performance increase.  Before explicitly adding an INDEX, the space
> usage
> in phpmyadmin already showed Type:Index using several bytes.  The table
> still has the INDEX I explicitly created.
>
> Can someone explain to me INDEXing ? I was thinking of field2 and > field3
> for an INDEX (since field3 holds a number from 1 - 14 and the composite
> key
> "field1 field2" would be unique), but I seem to be home free already. > I
> would just like to know "why" performance slowed and then "why" it
> improved
> with my solution.
>
> Regards.
>
> --

--


--
PHP Database Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [PHP Users]     [Postgresql Discussion]     [Kernel Newbies]     [Postgresql]     [Yosemite News]

  Powered by Linux