Hi Green,
I tried using SQL_CALC_FOUND_ROWS as suggested by you. I am executing some other queries following the query that has the clause SQL_CALC_FOUND_ROWS. The documentation says in such a case we can save the row count using *|SET @rows = FOUND_ROWS(); |*How can I retrieve this row count value later?
-Harini

[EMAIL PROTECTED] wrote:

Harini Raghavan <[EMAIL PROTECTED]> wrote on 10/05/2005 11:21:26 AM:

Hi,
I have implemented pagination for the search functionality in my application. Since I have a lot of data, I thought in memory paging would not be a good option and opted for paging at the database layer. To do this I am retrieving the no of records using the following query and then again executing another query which actually limits the no of records to 20. I am facing performance issues with the query. Since I am

executing this complex query twice, once to get the records and another time to get the first 20 records, the execution time is double and is very slow. I can probably bring down the execution time by half if I have any other

way to get the no. of records. Does anyone have any suggestions?
-Harini

<snipped first query>
select emp.id as id, exec1.firstName as firstName, exec1.lastName as lastName, exec1.id as execId, comp.name as name, comp.ticker as ticker,

emp.title as title from executive as exec1 , company comp, target_company targetComp, employment as emp where emp.executive_id = exec1.id and emp.company_id = comp.id and comp.id = targetComp.company_id and ((emp.title like 'V.P.' OR emp.title like 'V.P. %' OR emp.title like 'V.P., %' OR emp.title like 'V.P.. %' OR emp.title like '% V.P. %' OR emp.title like '% V.P., %' OR emp.title like '% V.P.. %' OR emp.title like '% V.P.' OR emp.title like '% V.P..')

OR (emp.title like 'Vice-President' OR emp.title like 'Vice-President %'

OR emp.title like 'Vice-President, %' OR emp.title like 'Vice-President.

%' OR emp.title like '% Vice-President %' OR emp.title like '% Vice-President, %' OR emp.title like '% Vice-President. %' OR emp.title like '% Vice-President' OR emp.title like '% Vice-President.') and emp.active = 1 order by lastName, firstName, id limit 0,20



Only execute the second query after you add the clause SQL_CALC_FOUND_ROWS to it. After the query comes back, you not only have the first 20 rows, you can also get the number of rows you would have returned if you didn't have the LIMIT clause by calling the function SELECT FOUND_ROWS().

http://dev.mysql.com/doc/mysql/en/select.html
http://dev.mysql.com/doc/mysql/en/information-functions.html

Shawn Green
Database Administrator
Unimin Corporation - Spruce Pine



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

Reply via email to