Thanks!

OK, here's where my understanding of MySQL and how indices work get fuzzy.

In my scenario what would the difference between (I tested with different indices these and included the query times with the EXPLAIN outputs):


(1) creating separate indices on entity_id and also on user_type - took 106 seconds (almost twice as long as before for some reason without these indices)

EXPLAIN output:
id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE users ALL user_idx,entity_idx NULL NULL NULL 750106 Using where; Using temporary; Using filesort
1       SIMPLE                  geo_entities    eq_ref  PRIMARY                 
        PRIMARY 4                       users.entity_id 1


vs

(2) creating a multicolumn index with entity_id and user_type - (as Filip has suggested) - took only 0.4 seconds, wow what a difference !!!

EXPLAIN output:
id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE geo_entities ALL PRIMARY NULL NULL NULL 238 Using temporary; Using filesort 1 SIMPLE users ref geo_idx geo_idx 7 geo_entities.id,const 4202 Using where; Using index



vs


(3) with all three indices in place - took 86 seconds.

EXPLAIN output:
id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE geo_entities ALL PRIMARY NULL NULL NULL 238 Using temporary; Using filesort 1 SIMPLE users ref user_type_idx,entity_idx,geo_idx geo_idx 7 geo_entities.id,const 4202 Using where; Using index



-James


On Jan 25, 2007, at 8:35 AM, Filip Krejc(í <[EMAIL PROTECTED]> <Filip Krejc> wrote:

Hi,

try

CREATE INDEX geo_idx ON users(entity_id, user_type);

Filip


Alex Arul napsal(a):
and also an index on users.entity_id (will help the join) should solve your
problem.
Thanks
Alex
On 1/24/07, Brent Baisley <[EMAIL PROTECTED]> wrote:

You should create indexes on the fields you search on most. In this case,
you are searching on the user_type field, so create an
index on that field. Otherwise you need to scan the entire table to find
out which users are of the type you are searching for.


----- Original Message -----
From: "James Tu" <[EMAIL PROTECTED]>
To: "MySQL List" <mysql@lists.mysql.com>
Sent: Tuesday, January 23, 2007 12:04 PM
Subject: speeding up a join COUNT


> I'm performance testing my 'users' table. It currently has roughly 1M
user records.  The 'geo_entities' table has ~ 250 records.
>
> Here's my query.
>
> SELECT users.entity_id,
geo_entities.entity_name, geo_entities.short_code, COUNT ( users.entity_id)
> FROM users, geo_entities
> WHERE users.user_type = 'user'
> AND users.entity_id = geo_entities.id
> GROUP BY entity_id
> LIMIT 0 , 30
>
> It took 51 seconds to execute.
>
> Both tables only have an index on their unique record id.
> Is there a way to speed up this up?
>
> -James
>
>
> --
> MySQL General Mailing List
> For list archives: http://lists.mysql.com/mysql
> To unsubscribe:
http://lists.mysql.com/[EMAIL PROTECTED]
>


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




--
Filip Krejci <[EMAIL PROTECTED]>

Why use Windows, since there is a door?


Reply via email to