SQL_CALC_FOUND_ROWS + select FOUND_ROWS() vs select count(id)

February 20, 2005

На пръв поглед вградената в php работа с рекърдсети е логична за употреба.

Имате едно сложно query
select SQL_CALC_FOUND_ROWS a.name, b.blah ……………………… limit 100,120 – това е страница 6-та от вашия списък.
select FOUND_ROWS() as c -> а това е общият брой, ако не бяхте стартирали първата заявка с limit.

Елементарна проверка обаче показва, че това нещо работи поне 10 пъти по-бавно от стандартната схема
select a.name, b.blah ……………………… limit 100,120
select count(id) from …………………….

Не съм сигурен защо, но леко се омазах с постинга ми към mysql_num_rows() в php.net 🙂 Просто mysql_num_rows() няма отношение към това И В ДВАТА СЛУЧАЯ.

Публикувано в: Гърнето с боба 5 коментара RSS 2.0

Ако постът ви харесва, цъкнете на сърцето:

Коментари

5 коментара на “SQL_CALC_FOUND_ROWS + select FOUND_ROWS() vs select count(id)”

  1. joudy on June 18th, 2006 09:36

    can we use SQL_CALC_FOUND_ROWS and FOUND_ROWS()
    in sql ?
    if no what is the replace of them
    we use
    “Select SQL_CALC_FOUND_ROWS * from ran limit $cps, $rpp”;
    in php and use odbc
    this query have an error
    can you help me?

  2. dzver on June 18th, 2006 10:54

    Joudy,

    In the article I said, that usage of SQL_CALC_FOUND_ROWS is deprecated for me, because it is slower than running second SQL query with select count(whateva) where …

    The fact that you are using odbc_ tells me that you have database connection to SQL server that is not MySQL (FOUND_ROWS is mysql function and will not work with MS SQL for example) or you are under windows OS with MyODBC. In the second case you could use mysql_* and SQL_CALC_FOUND_ROWS will work, I think. I don’t have windows+php+mysql machine to test this for you.

    In both cases you probably don’t need this, you may run second query for row count – your script will work faster anyway.

  3. joudy on June 18th, 2006 12:10

    thanks a million

  4. Мартин Радев on August 2nd, 2010 15:37

    И аз забелязвам, че SQL_CAL_FOUND_ROWS доста забавя. Това ме кара повече да не ползвам тази функция в MySQL. Ще си ползвам вече count()

  5. dzver on August 2nd, 2010 16:23

    Ако FOUND_ROWS() забавя твърде много, значи в самата заявка също има проблем 🙂

Оставете отговор