[解決済み] どちらが速いですか?SELECT SQL_CALC_FOUND_ROWS FROM `table`, or SELECT COUNT(*)
2022-04-15 20:33:37
質問
SQLクエリで返す行数を制限する場合、通常はページングで使用しますが、レコードの総数を決定する方法は2つあります。
方法1
を含める。
SQL_CALC_FOUND_ROWS
オプションは、元の
SELECT
を実行し、総行数を取得します。
SELECT FOUND_ROWS()
:
SELECT SQL_CALC_FOUND_ROWS * FROM table WHERE id > 100 LIMIT 10;
SELECT FOUND_ROWS();
方法2
通常通りクエリを実行し、総行数を得るには、次のようにします。
SELECT COUNT(*)
SELECT * FROM table WHERE id > 100 LIMIT 10;
SELECT COUNT(*) FROM table WHERE id > 100;
どの方式が最適/最速なのでしょうか?
解決方法は?
場合によって異なります。 このテーマについては、MySQL Performance Blog の記事を参照してください。
宛先
SQL_CALC_FOUND_ROWS
にするか、しないか。
SQL_CALC_FOUND_ROWS
?
簡単にまとめると、Peterは「インデックスやその他の要因に依存する」と言っています。 この投稿へのコメントの多くは、次のように言っているようです。
SQL_CALC_FOUND_ROWS
は、2つのクエリを実行するよりもほとんど常に遅く、時には10倍も遅くなることがあります。
関連
-
mysqlでインデックスに障害が発生する原因は何ですか?
-
MySQLデータベースでvarchar型の数値の大きさを比較する方法
-
SQL集計、グループ化、ソート
-
MySQLインストールチュートリアル(Windows用)詳細
-
mysql5.7のインストールと、無料・長期利用を目的としたNavicateの導入プロセスについて
-
CMakeエラー。ソースディレクトリ "/xxx/mysql-5.6.21" に CMakeLists.txt がないようです。
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] 整数の平方根が整数であるかどうかを判断する最速の方法
-
[解決済み】MYSQLのLIMITオフセットが高いと、なぜクエリが遅くなるのですか?
-
[解決済み] MySQL テーブルに行が存在するかどうかをテストする最良の方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
MySQLのLike演算子に関する詳細
-
[解決済み】MySQLで「すべての派生テーブルは独自のエイリアスを持つ必要があります」というエラーは何ですか?
-
[解決済み] [GROUP BY句に含まれるか、集約関数で使用される必要があります。
-
[解決済み】マルチパート識別子をバインドできない
-
[解決済み】SQLサーバーのテンポラリーテーブルで「すでに名前のついたオブジェクトがあります」エラーが発生する。
-
mysql5.7のインストールと、無料・長期利用を目的としたNavicateの導入プロセスについて
-
SQL Server のトランザクションは、try キャッチに記述しなければ、中間ステートメントがエラーを報告してもコミットされます。
-
[解決済み] MySQLデータベースのテーブルのサイズを取得する方法は?
-
[解決済み】MySQLデータ - ページングを実装するための最良の方法?
-
[解決済み] MySQL 行数をカウントする最速の方法