この方法知っておいて!【MySQL】トータル件数を超高速で取得する方法

MySQL
スポンサーリンク

[no_toc]
テーブル内のレコード件数を取得する方法としては、rowCount()count(*)などを使用する方法が良く使われているようですが、

実は、もっとスピーディで効率的に取得する方法があるので紹介します。

※ PHPを使用した例。

スポンサーリンク

ダメな例

まずは、よく使われる手法として2つの例をあげます。

正確には全然ダメではなく、ちゃんと動作します。

…が、すこし荷がかかります。

数千程度のそれほど多くないレコード数でアクセスもあまりなければそれでも大丈夫ですが、数十万レコードで、且つアクセスが多い時などは、ちょっとした負荷となってしまいます。

同じ結果を出すのであれば、負荷をかけずに処理したいところです。

以下は、あんまり良くない例です。

//あんまり良くない例1
// count(*)で取得する方法

try{
	$sql = "SELECT count(*) as cnt FROM 【テーブル名】";
	$stm = $pdo->prepare($sql);
	$stm->execute();
	$result = $stm->fetch(PDO::FETCH_ASSOC);
} catch(Exception $e) { exit("DB取得エラー"); } 

echo 'トータル件数'. $result['cnt'] .'件'; //件数表示
//あんまり良くない例2
// rowCount()で取得する方法

try{
	$sql = "SELECT * FROM 【テーブル名】";
	$stm = $pdo->prepare($sql);
	$stm->execute();
	$result = $stm->fetchAll(PDO::FETCH_ASSOC);
	$total = $stm->rowCount();
} catch(Exception $e) { exit("DB取得エラー"); } 

echo 'トータル件数'. $total .'件'; //件数表示

良い例

次に良い例を紹介します。

何をもって「良い」かと言うと、
「負荷がかからず」、「高速」ということです。

データベース処理の基本ですね。

やり方は、予め記録されているテーブルからレコード数を取得するだけです。

information_schemaとは?

データベースを作成すると、
作った覚えがないのに「information_schema」というデータベースが自動的に作成されているかと思います。

このデータベース内の各テーブルには、いろいろなメタ情報が含まれ、各データベース、テーブルごとにトータル件数も収納されています。

つまり、このデータをひとつ取り出せば良いということになります。

INFORMATION_SCHEMAでは、データベースメタデータへのアクセスを実現し、データベースまたはテーブルの名前、カラムのデータ型、アクセス権限などの MySQL Server に関する情報を提供します。この情報に使用されることがある別の用語が、データディクショナリシステムカタログです。

引用元:MySQL リファレンスマニュアル:INFORMATION_SCHEMA テーブル

具体的な方法

具体的な方法としては以下の通り。

try{
	$sql = "
	SELECT TABLE_ROWS
	FROM information_schema.TABLES
	WHERE
	table_schema = 【データベース名】 AND
	table_name = 【テーブル名】;
	";
  
	$stm = $pdo->prepare($sql);
	$stm->execute();
	$result = $stm->fetch(PDO::FETCH_ASSOC); //fetch
} catch(Exception $e) { exit("DB取得エラー"); } 

$total = $result★'TABLE_ROWS'★;

echo 'トータル件数'. $total .'件'; //件数表示

コピペして、【データベース名】と【テーブル名】を変更すればOKです。

この方法だと、レコードを1つ取り出すだけなので、超高速です。

以上。

コメント

タイトルとURLをコピーしました