thanks Fred! that's better. actully I took a field with one character but
it's better to run SELECT '1' FROM....

as I know, if there is not ORDER BY in the query, mySQL doesn't need to
check all records and retreives LIMIT number of them. I checked speed with
limit and without limit, limit was faster.

thanks for your help

----- Original Message ----- 
From: "Fred van Engen" <[EMAIL PROTECTED]>
To: "Mojtaba Faridzad" <[EMAIL PROTECTED]>
Cc: <[EMAIL PROTECTED]>
Sent: Tuesday, July 22, 2003 10:52 AM
Subject: Re: how to limit COUNT(*)


> Hi,
>
> On Tue, Jul 22, 2003 at 09:40:31AM -0400, Mojtaba Faridzad wrote:
> > for example:
> >
> > SELECT COUNT(*) as numfound FROM mytable WHERE mycondition;
> >
> > in this query, mytable and mycondition are variable and on run time,
they
> > are changed. I use this query to jump to the last page of a grid form.
> > sometimes the query may have more than million records and I want to
give a
> > warning to the user to specify a condition to limit the number of
records. I
> > would like to count the records upto 10000 (for example) and if the
records
> > are more than this, stop counting and ask user to change the condition.
to
> > solve this problem I did something like this:
> >
> > SELECT one_field FROM mytable WHERE mycondition LIMIT 10001;
> >
> > if the number of records of this query is equal to 10001, then I show
the
> > warning message. but this query is not as fast of COUNT query. is there
any
> > way to limit the first query?
> >
>
> My best attempt would be:
>
> SELECT 1 FROM mytable WHERE mycondition LIMIT 10001;
>
> Then get the result count without getting the actual results :(
>
> What you gain here is that MySQL will use just an index file if it can.
> By querying for 'one_field', it would use the data table if 'one_field'
> is not part of the index that is used for evaluating 'mycondition'.
>
> Are you sure that this query helps? Depending on 'mycondition', it might
> not be possible to use an index anyway. All records would need to be
> checked, even if the number of matches were less than 10001.
>
> If your query is guaranteed to use an index, you add ORDER BY ... DESC
> combined with a LIMIT to go to the last page of your form. You won't
> know the actual count to display then.
>
>
> Regards,
>
> Fred.
>
>
> > ----- Original Message ----- 
> > From: "gerald_clark" <[EMAIL PROTECTED]>
> > To: "Mojtaba Faridzad" <[EMAIL PROTECTED]>
> > Cc: <[EMAIL PROTECTED]>
> > Sent: Tuesday, July 22, 2003 9:15 AM
> > Subject: Re: how to limit COUNT(*)
> >
> >
> > > Perhaps you could post some examples of what you have tried.
> > > I don't understand what you are asking.
> > >
> > > Mojtaba Faridzad wrote:
> > >
> > > >Hi,
> > > >
> > > >I guess there is no way to limit COUNT(*). Is that right? We cannot
use
> > the
> > > >result of COUNT in WHERE condition or LIMIT doesn't help. In this
case so
> > > >far I have retrieved a field and used LIMIT. Is there a better way to
> > > >control it?
> > > >
> > > >Thanks
> > > >
> > > >
> > > >
> > > >
> > >
> > >
> > >
> > > -- 
> > > 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]
>
> -- 
> Fred van Engen                              XB Networks B.V.
> email: [EMAIL PROTECTED]                Televisieweg 2
> tel: +31 36 5462400                         1322 AC  Almere
> fax: +31 36 5462424                         The Netherlands
>
> -- 
> 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