現在の位置: ホーム> 最新記事一覧> PHP および MySQL ページング クエリの効率を向上させるインデックス最適化手法

PHP および MySQL ページング クエリの効率を向上させるインデックス最適化手法

M66 2025-10-30

PHP および MySQL ページング クエリの効率を向上させるインデックス最適化手法

PHP および MySQL でページング クエリを実行する場合、データベースのインデックスによりクエリ効率が大幅に向上します。この記事では、インデックスを使用してページング クエリを最適化し、システム パフォーマンスを向上させる方法を説明します。

インデックスとは何ですか

インデックスは、データのクエリ プロセスを高速化するために設計されたデータベース内のデータ構造です。インデックスを作成すると、MySQL はテーブル内のデータ行をより効率的に見つけることができるため、クエリのパフォーマンスが向上します。ページング クエリはクエリの効率に影響を与えることが多く、適切なインデックスはこのプロセスで重要な役割を果たします。

インデックスの作成方法

MySQL では、インデックスはテーブルの作成時に指定することも、テーブルの作成後に ALTER TABLE ステートメントを介して追加することもできます。一般的なインデックスの種類には、通常のインデックス、一意のインデックス、主キー インデックス、およびフルテキスト インデックスが含まれます。ページング クエリのシナリオでは、通常、通常のインデックスが使用されます。

以下はテーブルとインデックスを作成するサンプルコードです。

 CREATE TABLE `user` (  
  `id` int(11) NOT NULL AUTO_INCREMENT,  
  `name` varchar(255) NOT NULL,  
  `age` int(11) NOT NULL,  
  PRIMARY KEY (`id`),  
  INDEX `idx_name` (`name`)  
) ENGINE=InnoDB;

このコードは、`user` という名前のテーブルと、`name` 列に `idx_name` という名前の通常のインデックスを作成します。

ページングクエリにインデックスを使用する方法

PHP コードでは、「LIMIT」キーワードを「ORDER BY」句と組み合わせて使用​​して、クエリ結果の数を制限し、それらを並べ替えることができます。インデックスと組み合わせて使用​​すると、ページ分割されたクエリのパフォーマンスが大幅に向上します。

以下は、PHP を使用したページング クエリのサンプル コードです。

 <?php  
$servername = "localhost";  
$username = "your_username";  
$password = "your_password";  
$dbname = "your_database";  

// データベース接続の作成  
$conn = new mysqli($servername, $username, $password, $dbname);  

// 接続が成功したかどうかを確認する  
if ($conn->connect_error) {  
    die("接続に失敗しました: " . $conn->connect_error);  
}  

// ページングパラメータ  
$pageSize = 10; // ページごとに表示されるレコードの数  
$page = isset($_GET['page']) ? intval($_GET['page']) : 1; // 現在のページ番号  

// レコードの総数を問い合わせる  
$sql = "SELECT COUNT(*) AS total FROM user";  
$res = $conn->query($sql);  
$row = $res->fetch_assoc();  
$total = $row['total'];  

// ページングデータのクエリ  
$offset = ($page - 1) * $pageSize; // オフセット  
$sql = "SELECT * FROM user ORDER BY name LIMIT $offset, $pageSize";  
$res = $conn->query($sql);  

// ページ分割されたデータを出力する  
if ($res->num_rows > 0) {  
    while ($row = $res->fetch_assoc()) {  
        echo "ID: " . $row['id'] . " - Name: " . $row['name'] . " - Age: " . $row['age'] . "<br>";  
    }  
} else {  
    echo "0 結果";  
}  

// ページ分割されたナビゲーションを出力する  
$totalPages = ceil($total / $pageSize); // 総ページ数  
$prevPage = $page - 1; // 前のページのページ番号  
$nextPage = $page + 1; // 次のページ番号  

echo "<br>";  
echo "<a href='?page=$prevPage'>前のページへ</a> ";  
for ($i = 1; $i <= $totalPages; $i++) {  
    echo "<a href='?page=$i'>$i</a> ";  
}  
echo "<a href='?page=$nextPage'>次のページ</a>";  

// データベース接続を閉じる  
$conn->close();  
?>  

このコードは、まずデータベース接続を作成し、ページング パラメーターを設定します。次に、「LIMIT」キーワードと計算されたオフセットを使用してページング データをクエリし、最後にページング結果とナビゲーションを出力します。

要約する

インデックスを正しく作成して使用すると、PHP および MySQL でのページング クエリの効率が大幅に向上します。実際の開発では、特定のビジネス ニーズとデータ規模に基づいてページング クエリをさらに最適化することで、ユーザー エクスペリエンスとシステム パフォーマンスを大幅に向上させることができます。