PythonでSQLデータベースにインデックスを追加する方法を初心者向けにやさしく解説
生徒
「PythonでSQLデータベースを使っていると、データが増えた途端に検索が遅くなりました。何か対策はありますか?」
先生
「それならインデックスを追加すると改善することがあります。SQLデータベースではとても大切な仕組みです。」
生徒
「インデックスって難しそうな言葉ですね……」
先生
「大丈夫です。本の目次のようなものだと思えば、すぐ理解できますよ。」
1. SQLデータベースのインデックスとは何か
SQLデータベースのインデックスとは、データをすばやく探すための仕組みです。分厚い本を最初から最後までめくるのではなく、目次を見て目的のページを開くイメージです。
インデックスがない場合、SQLデータベースは条件に合うデータを一行ずつ確認します。データが少ないうちは問題ありませんが、数千、数万と増えると処理が遅くなります。
インデックスを追加すると、検索に使う列の位置が整理され、必要なデータに一気にたどり着けるようになります。
2. PythonでSQLデータベースを操作する前提
ここではPythonからSQLデータベースを操作する例として、よく使われるSQLiteを使います。SQLiteはファイルだけで動くため、初心者にも扱いやすいデータベースです。
Pythonでは標準でsqlite3という仕組みが用意されており、特別な準備をしなくてもSQL操作ができます。
インデックスの追加も、PythonからSQL文を実行するだけで行えます。
3. テーブルを用意する基本例
まずは、インデックスを追加する対象となるテーブルを用意します。ユーザー情報を保存する簡単なテーブルを例にします。
import sqlite3
conn = sqlite3.connect("sample.db")
cursor = conn.cursor()
cursor.execute("""
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY,
name TEXT,
age INTEGER
)
""")
conn.commit()
conn.close()
このテーブルには、名前や年齢といったデータが入る想定です。検索でよく使う列にインデックスを追加します。
4. SQLでインデックスを追加する基本構文
SQLデータベースにインデックスを追加するには、CREATE INDEXという命令を使います。
たとえば、name列で検索することが多い場合、次のように書きます。
import sqlite3
conn = sqlite3.connect("sample.db")
cursor = conn.cursor()
cursor.execute("""
CREATE INDEX idx_users_name
ON users(name)
""")
conn.commit()
conn.close()
これでusersテーブルのname列にインデックスが追加されました。以降、名前で検索する処理が速くなります。
5. インデックスが効いている場面のイメージ
インデックスがある状態でSQL検索を行うと、データベースはすべての行を確認しません。
代わりに、インデックスを使って「この条件に合う場所はここ」とすぐに判断します。
import sqlite3
conn = sqlite3.connect("sample.db")
cursor = conn.cursor()
cursor.execute("SELECT * FROM users WHERE name = 'Taro'")
result = cursor.fetchall()
print(result)
conn.close()
データ量が多くなるほど、この違いは大きくなります。
6. インデックスを付けすぎないことも重要
インデックスは便利ですが、たくさん付ければ良いわけではありません。
インデックスを作ると、その分データベースに追加の情報が保存されます。また、データを追加や更新するたびにインデックスも更新されます。
そのため、検索によく使う列だけにインデックスを付けるのが基本です。
7. インデックスの存在を確認する方法
SQLデータベースでは、インデックスが作成されているかを確認することもできます。
import sqlite3
conn = sqlite3.connect("sample.db")
cursor = conn.cursor()
cursor.execute("PRAGMA index_list('users')")
print(cursor.fetchall())
conn.close()
この結果を見ることで、どのインデックスが存在しているかを把握できます。
8. 初心者が押さえておきたいインデックスの考え方
PythonでSQLデータベースにインデックスを追加する目的は、検索を速くすることです。
すべてに付けるのではなく、「よく探す条件は何か」を考えることが大切です。
インデックスは、データベースの使い心地を大きく変える重要な仕組みです。基本を理解しておくだけで、実用的なプログラムに近づきます。