I seem to remember someone saying that if a query would end up returning more than x% 
of a table (I think it was either 30% or 50%), then mysql just ends up doing a full 
scan regardless...

> -----Original Message-----
> From: Eric Anderson [mailto:[EMAIL PROTECTED]
> Sent: Thursday, November 06, 2003 2:08 PM
> To: [EMAIL PROTECTED]
> Subject: This is confusing..?
> 
> 
> 
> Given the following table:
> 
> CREATE TABLE campaign_t (
>   acct_id int(11) unsigned NOT NULL default '0',
>   site_id tinyint(3) unsigned NOT NULL default '0',
>   ref_id int(11) unsigned NOT NULL default '0',
>   datestamp char(10) NOT NULL default '',
>   raws int(11) unsigned NOT NULL default '0',
>   uniques int(11) unsigned NOT NULL default '0',
>   trial_signups int(11) NOT NULL default '0',
>   full_signups int(11) NOT NULL default '0',
>   annual_signups int(11) unsigned NOT NULL default '0',
>   PRIMARY KEY  (acct_id,site_id,ref_id,datestamp),
>   KEY acct_id (acct_id),
>   KEY site_id (site_id),
>   KEY ref_id (ref_id),
>   KEY datestamp (datestamp)
> ) TYPE=MyISAM;
> 
> How come it doesn't use the 'datestamp' index on this query:
> 
> mysql> explain SELECT * FROM campaign_t WHERE datestamp < 20041105\g
> +------------+------+---------------+------+---------+------+-
> -------+------------+
> | table      | type | possible_keys | key  | key_len | ref  | 
> rows   | Extra      |
> +------------+------+---------------+------+---------+------+-
> -------+------------+
> | campaign_t | ALL  | datestamp     | NULL |    NULL | NULL | 
> 438166 | where used |
> +------------+------+---------------+------+---------+------+-
> -------+------------+
> 1 row in set (0.00 sec)
> 
> -- 
> 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]

Reply via email to