2009-03-04 13 views
0

我剛剛閱讀了關於mysql的SQL_CALC_FOUND_ROWS和FOUND_ROWS(),它可以通過刪除LIMIT條件來幫助您獲得先前執行的查詢的總體結果大小。現在我想在現有的Web應用程序中使用此功能。如何將SQL_CALC_FOUND_ROWS和FOUND_ROWS()合併到現有的Web應用程序

我心裏有幾種方法,但我不知道這是最好的:

1)PHP是否已經有使用FOUND_ROWS()功能的功能呢?我正在使用php 5與mysqli和MySQL 5與innodb存儲引擎。

2)我正在構建的應用程序已經有了自己的數據訪問對象,它包裝了mysqli庫。它負責生成經常使用的CRUD查詢。我應該編輯這個對象以在所有SELECT查詢中包含SQL_CALC_FOUND_ROWS嗎?可能存在什麼併發症?

其他想法/反饋?

回答

2

1)PHP已經有使用FOUND_ROWS()功能的功能嗎?我正在使用php 5與mysqli和MySQL 5與innodb存儲引擎。

我以爲mysql_num_rows這樣做,但經過一些瀏覽,我想我可能是錯的。

UPDATE:是的,我錯了:)

2)申請我已經建設有它的一個包裝的mysqli圖書館自己的數據訪問對象。它負責生成常用的CRUD查詢。我是否應該編輯此對象以在所有SELECT查詢中包含SQL_CALC_FOUND_ROWS?可能存在什麼併發症?

SQL_CALC_FOUND_ROWS將嘗試計算將返回在那裏你的查詢沒有LIMIT子句中的行數。

這將利用元數據中有且僅有一個案例:

  1. 當你的表使用MyISAM引擎,
    • 當你的查詢沒有WHERE條款。

在其他情況下SQL_CALC_FOUND_ROWS將計算行一個接一個,影響性能。

不要將它附加到每個查詢。

+0

@Quassnoi:找不到關於MyISAM(或InnoDB)+`SQL_CALC_FOUND_ROWS`的任何內容,你確定InnoDB是一個一個地計算行嗎? – 2010-04-27 05:18:10

1

1.)不,php沒有這樣的功能。

2.)我認爲最好只在真正需要時才使用SQL_CALC_FOUND_ROWS。

相關問題