In some cases, MySQL handles a query differently when you are
using LIMIT
and not using
row_count
HAVING
:
If you are selecting only a few rows with
LIMIT
, MySQL uses indexes in some cases
when normally it would prefer to do a full table scan.
If you use LIMIT
with
row_count
ORDER BY
, MySQL ends the sorting as soon
as it has found the first
row_count
rows of the sorted
result, rather than sorting the entire result. If ordering
is done by using an index, this is very fast. If a filesort
must be done, all rows that match the query without the
LIMIT
clause must be selected, and most
or all of them must be sorted, before it can be ascertained
that the first row_count
rows
have been found. In either case, after the initial rows have
been found, there is no need to sort any remainder of the
result set, and MySQL does not do so.
When combining LIMIT
with
row_count
DISTINCT
, MySQL stops as soon as it finds
row_count
unique rows.
In some cases, a GROUP BY
can be resolved
by reading the key in order (or doing a sort on the key) and
then calculating summaries until the key value changes. In
this case, LIMIT
does not
calculate any unnecessary row_count
GROUP BY
values.
As soon as MySQL has sent the required number of rows to the
client, it aborts the query unless you are using
SQL_CALC_FOUND_ROWS
.
LIMIT 0
quickly returns an empty set.
This can be useful for checking the validity of a query.
When using one of the MySQL APIs, it can also be employed
for obtaining the types of the result columns. (This trick
does not work in the MySQL Monitor (the
mysql program), which merely displays
Empty set
in such cases; you should
instead use SHOW COLUMNS
or
DESCRIBE
for this purpose.)
When the server uses temporary tables to resolve the query,
it uses the LIMIT
clause to
calculate how much space is required.
row_count
User Comments
When one is using a LIMIT attribute in their query ,
it's often fallowed by an OFFSET. These two togeather
are often used in pagination ( paging of results ) as in.
select * from thetable limit 10 offset 0
To find out how many rows would be available if one had not
used the LIMIT / OFFSET, one would alter the statement
above to look like this
select SQL_CALC_FOUND_ROWS * from thetable limit 10 offset 0
The return from both commands looks the same, so to get the
row count you need to issue a fallowup query
select FOUND_ROWS()
So one wants to search for a particular record/row in
the database table and calculate an initial offset
value to feed into the typical pagination routines.
While there may be better ways to do this , what I cobbled
together was this little bit of MySql syntax that seems to work just fine on my little 40,000 row table.
set @row=-1;select foo.Row,foo.company_name from (select @row:= @row+1 AS Row ,company_name from TheCompanyDatabaseTable ) AS foo where foo.company_name='whatever';
Given the fact I searched in vein for this answer , I figured I'd post the answer I hacked up so it will
be here the next time I need it.
Add your own comment.