ホームページ > バックエンド開発 > PHPチュートリアル > MS SQLSERVER_PHP チュートリアルでテーブル内のレコードの合計数をすばやく取得する方法

MS SQLSERVER_PHP チュートリアルでテーブル内のレコードの合計数をすばやく取得する方法

WBOY
リリース: 2016-07-13 17:01:39
オリジナル
934 人が閲覧しました

データベース アプリケーションの設計では、テーブル内のレコードの合計数が大きすぎるかどうか、データをバックアップする必要があるかどうかを判断するために、特定のテーブル内のレコードの合計数を取得する必要があることがよくあります。通常のアプローチは次のとおりです。 select count(*) as c from tableA。ただし、膨大な数のレコードがあるテーブルの場合、上記のアプローチは非常に時間がかかります。 DELL 4400 サーバーでのテスト中に、MS Sqlserver 2000 データベースは 100 万レコードを持つ単純なデータ テーブルに対して上記のステートメントを実行しましたが、これには 1 分以上かかりました。テーブルの特定のフィールドにクラスタード インデックスを作成すると、最初にステートメントを実行するのにかかる時間はインデックスがない場合とほぼ同じになり、その後、上記のステートメントは 1 秒以内に非常に高速に実行されます。 2 番目ですが、テーブル内のレコード数が変更された場合。大きな変更の後、ステートメントを再度実行すると、時間のかかるプロセスが実行されます。また、すべてのテーブルがクラスター化インデックスに適しているわけではありません。大量のテーブルの場合、頻繁に追加と削除が必要な場合、追加と削除の速度に大きな影響を与えるクラスター化インデックスを構築するのは賢明ではありません。それでは、テーブル内のレコードの総数をすばやく取得する簡単な方法はあるのでしょうか?答えは「はい」です。
MS SQL データベースでは、sysindexes システム テーブルに各テーブルに少なくとも 1 つのレコードがあり、このレコードの行フィールドにはテーブル内のレコードの合計数が定期的に記録されます。以下は、sysindexes テーブルの関連レコードの意味です:
列名 データ型 説明
id int テーブル ID (indid = 0 または 255 の場合)。それ以外の場合は、インデックスが属するテーブルの ID です
Indid smallint インデックス ID:
0 = テーブル
1 = クラスター化インデックス
> 1 = 非クラスター化インデックス
255 = テキストまたは画像データを含むテーブル エントリ。
rows int indid=0 および indid=1 に基づくデータレベルの行数。この値は indid>1 の場合に繰り返されます。 indid=255 の場合、行数は 0 に設定されます。


テーブルにクラスター化インデックスがない場合は Indid = 0、それ以外の場合は 1。
これで、テーブル内のレコードの合計数を取得する方法がわかるはずです。次のステートメントを実行するだけです。
id = object_id(tablename) および indid in (0,1) の sysindexes から行を選択します
このメソッドの速度テーブル内のレコードの総数を取得します。これは非常に高速であり、select count(*) よりも数万倍も高速です。ただし、このメソッドを使用する場合は、総数に注意する必要があります。この方法で取得されたテーブル内のレコードは正確な値ではありません。MS SQL はこのフィールドの値をリアルタイムでは更新しませんが、実際には、この値と正確な値との間の誤差は大きくありません。テーブルのサイズをすばやく大まかに見積もる場合は、この方法を使用することをお勧めします。正確な値を取得したい場合は、上記のステートメントを実行する前に DBCC UPDATEUSAGE(DatabaseName,[TABLENAME]) WITH ROW_COUNTS を実行してフィールドの値を強制的に更新してください。ただし、これには最初の更新時に時間がかかります。この効果 選択カウント (*) の効果は、クラスター化インデックスを持つテーブルの効果とあまり変わらないため、テーブル内の正確な合計レコード数を比較的迅速に取得したい場合は、2 つのオプションがあります。 、クラスター化インデックスを構築するか、最初に DBCC を使用してから、上記の方法を使用します。


www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/631131.html技術記事データベース アプリケーションの設計では、テーブル内のレコードの合計数が多すぎるかどうか、データをバックアップする必要があるかどうかを判断するために、特定のテーブル内のレコードの合計数を取得する必要があることがよくあります。私たちのいつものアプローチ...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート