0

私は非常によくある問題を抱えていますが、それに対する良い答えが見つからないようです。

このデータをページ分割するのに十分な情報だけでなく、テーブルから 1 ページ分の行を取得する必要があります。したがって、一般に、行の総数を非常に大まかに見積もる必要があります (一般に、私が知る必要があるのは だけですceil(count()/50))。

本当にcount()やり過ぎです。そして、私はすでにSELECT * FROM table LIMIT 0, 50実行しているので、このコマンドに追加できればなおさらです。

について聞いたことがありSQL_CALC_FOUND_ROWSます。ただ、count自分でやるより特に効率的というわけではないとも聞きました。「残念ながら、SQL_CALC_FOUND_ROWS を使用すると、発生する可能性のある LIMIT 最適化が吹き飛ばされるという厄介な結果が生じます」。

したがって、全体として、MySQL の行推定を使用するのがよい方法だと思います。しかし、私はそれを行う方法がわかりません。または、この見積もりがどれほどずれている可能性がありますか。

注 1: 私の状況では、私が作業しているほとんどのテーブルは、常にではなく、1 日に数回更新されるだけです。注2:phpでPDOを使用しています。

4

2 に答える 2

0

殴り殺された古い話題です。何度も。Count は、典型的なテーブルの行数を取得する最速の方法です。しかし、そこから何も削除しない場合 (これは奇妙な仮定ですが、場合によっては機能します)、単純に最後の行の ID を取得できます (これはより高速である可能性がありますが、必ずしもそうとは限りません)。ほとんどの場合正しくないため、これは見積もりの​​ニーズにも適合します。

しかし、繰り返しになりますが、たとえば myisam を使用している場合は、カウントに勝るものはありません(これはほとんどの場合に当てはまります)。

于 2013-05-02T21:22:42.577 に答える