Django: モデルのカラムにインデックスを付与する方法

2010年2月14日

関連記事
Djangoでモデルを定義しても、特段ユーザが明示しない限りインデックスが付与されることは ありません。インデックスがデフォルトで付与されているのは暗黙のカラムの「id」カラムだけです。

前回の例:Mailクラスでは、 以下のようにテーブルが作成されていますので、確かにその通りになっていますね。

1
2
3
4
5
6
7
8
9
$ python manage.py dbshell 
maildb=> \d 
maildb_mail Table "public.maildb_mail" 
Column | Type | Modifiers 
---------+--------------------------+------------------------------------------------------------ 
id | integer | not null default nextval('public.maildb_mail_id_seq'::text) name | character varying(100) | not null address | character varying(100) | not null 
Indexes: 
"maildb_mail_pkey" primary key, btree (id) 
maildb=>
なお、DB名にクラス名を付与したものがテーブル名となっており、今回の例ではDB(maildb)に、 Mailモデルクラスを定義したので、実態のテーブルとしては「maildb_mail」となっています。

さて、nameカラムにインデックスを割り当ててみましょう。
以下のように、「db_index=True」をオプションとして追加指定するだけです。

1
2
3
4
5
from django.db import models

class Mail(models.Model):
    name = CharField(db_index=True)
    address = EMailField()

最後に、python manage.py syncdbを忘れずに!