[解決済み】非常に大きなテーブルの正確な行数をカウントする最速の方法?
2022-04-03 14:17:46
質問
以下のような記事を目にしたことがあります。
SELECT COUNT(*) FROM TABLE_NAME
は、テーブルが多くの行と多くの列を持つ場合、遅くなります。
数十億の行を含むかもしれないテーブルがあります(約15列あります)。を取得する良い方法はないでしょうか? EXACT テーブルの行数のカウントは?
以下を考慮の上、ご回答ください。
-
データベースベンダーを探しています。 独立したソリューションです。以下のようなものであればOKです。 カバーするもの MySQL , オラクル , MS SQLサーバー . しかし、もし 本当に データベースがない ベンダーに依存しないソリューション 異なるソリューションで解決する データベースベンダーごとに
-
他の外部ツールは使えない を行うことができます。私は主に SQLベースのソリューションです。
-
データベースの設計を正規化できない これ以上 すでに3NFになっていますし、しかも 多くのコードがすでに書かれています。 を使用することができます。
解決方法は?
簡単な答えです。
-
データベースベンダーに依存しないソリューション=標準を使用する=。
COUNT(*)
- があります。 おおよそ SQL Server のソリューションですが、COUNT(*) = アウトオブスコープを使用しないでください。
注意事項
COUNT(1) = COUNT(*) = COUNT(PrimaryKey)です。 念のため
編集する
SQL Serverの例(14億行、12カラム)
SELECT COUNT(*) FROM MyBigtable WITH (NOLOCK)
-- NOLOCK here is for me only to let me test for this answer: no more, no less
1本、5分46秒、カウント=1,401,659,700
--Note, sp_spaceused uses this DMV
SELECT
Total_Rows= SUM(st.row_count)
FROM
sys.dm_db_partition_stats st
WHERE
object_name(object_id) = 'MyBigtable' AND (index_id < 2)
2回実行、いずれも1秒以下、カウント=1,401,659,670
2回目の方が行数が少ない=間違い。書き込みによっては同じかそれ以上になる(ここでは削除は時間外に行われる)。
関連
-
[解決済み】Teradata - 計算中に数値のオーバーフローが発生しました。
-
[解決済み] アンピボットの主キーを含む対象コードページで、テキストが切り捨てられたか、1つ以上の文字が一致しない。
-
[解決済み] リンクされたサーバーの NULL に対して OLE DB プロバイダー Microsoft.Jet.OLEDB.4.0 のインスタンスを作成できません。
-
[解決済み] varchar 値の変換で int カラムがオーバーフローしました。
-
[解決済み] 列名または提供された値の数がテーブル定義と一致しません。
-
[解決済み] オペランド型の衝突:uniqueidentifierはintと互換性がない
-
[解決済み] 1行目4列目(年)の一括読み込みデータ変換エラー(型の不一致または指定したコードページに対して無効な文字)
-
[解決済み] SQLで複数のGROUP BYを使用する場合とは?
-
[解決済み] Entity Frameworkにおける最速の挿入方法
-
[解決済み】Oracleクエリが順序付け後に返す行数を制限するにはどうすればいいですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] SELECT DISTINCTを指定した場合、ORDER BY項目は必ず選択リストに表示されます。
-
[解決済み] ORA-01735: 無効な ALTER TABLE オプション - ヒキガエル
-
[解決済み] Presto SQL ピボッティング(言葉は悪いですが)データ
-
[解決済み] 集計を行わずに行から列へピボット移動する
-
[解決済み] Presto の JSON_EXTRACT で ' ' 文字を含むキーに問題がある。
-
[解決済み] Ruby On Rails で NuoDB を使用して SQL コマンドを手動で実行する方法
-
[解決済み] ORA-00997: LONG データタイプの不正使用に対する回避策
-
[解決済み] マルチパート識別子をバインドできなかった
-
[解決済み] SQLでテーブルの行数を数える
-
[解決済み】Count(*)とCount(1)の比較 - SQL Server