Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Does Django automatically create indexes?

I'm working on a Django project using Postgresql as an attached database. I've noticed that some queries took a very long time and even found that I had over a dozen indexes on many different fields in my database, some that I've deemed unnecessary.

My plan is to remove the ones I do not need but I'm interested to know if Django does this in a "smart" way when creating models or there is some default mechanism in place for creating indexes that I am unaware of.

like image 218
Thatcher Thornberry Avatar asked Mar 28 '26 12:03

Thatcher Thornberry


1 Answers

Django does create indexes automatically for some fields. For example it is stated in the documentation for Foreign Keys:

A database index is automatically created on the ForeignKey. You can disable this by setting db_index to False.

Also when you set unique to True on a field:

Note that when unique is True, you don’t need to specify db_index, because unique implies the creation of an index.

Also on a SlugField:

Implies setting Field.db_index to True.

On a field level you can control whether a field has an index or not by passing the db_index argument to the field.

You can also specify the indexes option in the models Meta:

class MyModel(model.Model):
    ...
    class Meta:
        indexes = [
            models.Index(fields=['field1', 'field2'], name='some_idx'),
        ]
like image 67
Abdul Aziz Barkat Avatar answered Mar 30 '26 00:03

Abdul Aziz Barkat



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!