Hello.


> Or something else entirely? I'd guess the latter is the

> Right Way, since the index will be significantly smaller,

> but then I still need to go to the table to retrieve foo_id.



What is important for you - speed or space?  5-6 million rows

for table with this structure won't take much space - not more then

several hundreds megabytes by my calculations, so the speed may be

that you want. According to:

  http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html



Queries like "select user_id, foo_id from user_foos where user_id > 2"

can be optimized to retrieve values without consulting the data rows. If

a query uses only columns from a table that are numeric and that form a

leftmost prefix for some key, the selected values may be retrieved from

the index tree for greater speed.







Eamon Daly wrote:

> I don't know why I have so much trouble visualizing indexes,

> but such is life. Imagine a simple table with only two

> columns: user_id and foo_id. I will only ever be looking up

> records in this table by user_id, but I will always retrieve

> both fields. Figure a million rows and maybe 5 or so rows

> per user_id.

> 

> Should the table be defined with a PK across all columns:

> 

> CREATE TABLE `user_foos` (

>   `user_id` int(10) unsigned NOT NULL default '0',

>   `foo_id` int(10) unsigned NOT NULL default '0',

>   PRIMARY KEY  (`user_id`,`foo_id`)

> ) ENGINE=MyISAM DEFAULT CHARSET=latin1

> 

> or should the table have no PK and a key on user_id:

> 

> CREATE TABLE `user_foos` (

>   `user_id` int(10) unsigned NOT NULL default '0',

>   `foo_id` int(10) unsigned NOT NULL default '0',

>   KEY `user_id_idx` (`user_id`)

> ) ENGINE=MyISAM DEFAULT CHARSET=latin1

> 

> Or something else entirely? I'd guess the latter is the

> Right Way, since the index will be significantly smaller,

> but then I still need to go to the table to retrieve foo_id.

> 

> ____________________________________________________________

> Eamon Daly

> 

> 



-- 
For technical support contracts, goto https://order.mysql.com/?ref=ensita
This email is sponsored by Ensita.NET http://www.ensita.net/
   __  ___     ___ ____  __
  /  |/  /_ __/ __/ __ \/ /    Gleb Paharenko
 / /|_/ / // /\ \/ /_/ / /__   [EMAIL PROTECTED]
/_/  /_/\_, /___/\___\_\___/   MySQL AB / Ensita.NET
       <___/   www.mysql.com




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

Reply via email to