{category}

PHP - データベース設計

インデックス

インデックス(データベースとSQL

意味 データ検索の高速化


インデックスとは?

インデックスは、データベースのテーブルに対して作成される特別な構造です。大量のデータから特定の情報を素早く見つけ出すために使われます。本の索引のように、データの位置を素早く特定することができ、検索速度を大幅に向上させます。

インデックスの具体的な使い方

インデックスの作成と効果の確認

<?php
$pdo = new PDO('mysql:host=localhost;dbname=shop', 'username', 'password');

// インデックス作成前の検索時間を計測
$start = microtime(true);
$stmt = $pdo->query("SELECT * FROM products WHERE product_name LIKE '%スマートフォン%'");
$end = microtime(true);
$time_before = $end - $start;

// インデックスの作成
$pdo->exec('CREATE INDEX idx_product_name ON products(product_name)');

// インデックス作成後の検索時間を計測
$start = microtime(true);
$stmt = $pdo->query("SELECT * FROM products WHERE product_name LIKE '%スマートフォン%'");
$end = microtime(true);
$time_after = $end - $start;

echo "インデックス作成前の検索時間: {$time_before} 秒\n";
echo "インデックス作成後の検索時間: {$time_after} 秒\n";
echo "速度向上率: " . round(($time_before - $time_after) / $time_before * 100, 2) . "%\n";

👇出力結果

インデックス作成前の検索時間: 0.0521 秒
インデックス作成後の検索時間: 0.0032 秒
速度向上率: 93.86%

この例では、まずproductsテーブルのproduct_nameカラムに対する検索時間を計測します。その後、product_nameカラムにインデックスを作成し、再度同じ検索を行って時間を計測します。インデックスの作成により、特定の検索がどれだけ高速化されたかを確認できます。実際の結果は、データ量やシステム環境により異なります。

インデックスに関するよくある質問

Q. インデックスのメリットは?
A. インデックスの主なメリットは、データ検索の高速化です。特に大規模なテーブルで特定の列に基づいて頻繁に検索が行われる場合、インデックスを使用することで検索パフォーマンスが大幅に向上します。
Q. インデックスのデメリットは?
A. インデックスのデメリットには、追加のストレージ空間が必要になることと、データの挿入・更新・削除操作が遅くなる可能性があることが挙げられます。これは、インデックスも同時に更新する必要があるためです。
Q. どの列にインデックスを作成?
A. 一般的に、頻繁に検索条件として使用される列や、JOINの結合キーとして使用される列にインデックスを作成します。また、一意性の高い列(例:主キー)にインデックスを作成すると効果的です。

PHPのインデックスについても学べる書籍の紹介

「プログラミング単語帳」を使って、プログラミングの単語を英単語のように学習してみませんか?
プログラミング単語帳には、PHPのインデックスやPDO::lastInsertId()、PDO::__construct()、SELECT、などのような実務でよく使われる単語が数百以上収録されています。
この書籍には、プログラミングの単語の意味や読み方、単語の使い方がわかる例文などが掲載されており、いつでもどこでもプログラミングの学習ができます。

よく使われる単語にだけ絞って学習することができるので、効率的にプログラミングが学習できます。

1日5分の暗記でプログラミンが身に付く!プログラミング単語帳 公式ストアで発売中!

HTML編、CSS編、JavaScript編、PHP編、Ruby編、その他単語編の6シリーズ分が公式ストアにて販売中です。気になった方はぜひ購入してみてください。


PHPを学べる「プログラミング単語帳」アプリ

プログラミング単語帳がアプリになりました!PHPはもちろん、10種類のプログラミング言語の中から、よく使われる単語をスマホで学習できます。

収録単語は2,000単語以上!
現在は、HTML、CSS、JavaScirpt、PHP、Laravel、Ruby、Python、MySQL、Linux、など10カテゴリーの単語帳が1つのアプリに収録されています。

いつでも、どこでも、隙間時間を有効活用して、プログラミングを効率的に学べるので、ぜひダウンロードしてみてください。

2024年7月アップデート情報:「Laravel」カテゴリーが追加されましました!

2024年8月アップデート情報:「MySQL」「Linux」カテゴリーが追加されましました!


関連するそのほかの単語

PDO::lastInsertId()

最後に挿入された行のID取得

種類: PDO

PDO::__construct()

データベース接続の確立

種類: PDO

SELECT

データの取得

種類: SQL基礎

strtotime()

日付文字列をタイムスタンプに

種類: 日付時間関数

interface

メソッドの仕様を定義

種類: インターフェース