from django.db import models
class Person(models.Model):
name = models.CharField(max_length=200)
class Meta:
indexes = [
models.Index(
fields=['name'],
name='name_idx',
),
]
Slide 29
Slide 29 text
from django.db import models
class Person(models.Model):
name = models.CharField(max_length=200)
age = models.PositiveSmallIntegerField()
class Meta:
indexes = [
models.Index(
fields=['name', 'age'],
name='name_age_idx',
),
]
Slide 30
Slide 30 text
from django.contrib.postgres.fields import JSONField
from django.contrib.postgres.indexes import GinIndex
from django.db import models
class Doc(models.Model):
data = JSONField()
class Meta:
indexes = [
GinIndex(
fields=['data'],
name='data_gin',
),
]
Slide 31
Slide 31 text
$ python manage.py sqlmigrate someapp 0001
BEGIN;
--
-- Create model Doc
--
CREATE TABLE "someapp_doc" (
"id" serial NOT NULL PRIMARY KEY,
"data" jsonb NOT NULL);
--
-- Create index data_gin on field(s) data of model doc
--
CREATE INDEX "data_gin" ON "someapp_doc" USING gin ("data");
COMMIT;
Slide 32
Slide 32 text
Feature Ideas
Slide 33
Slide 33 text
Functional Indexes
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=200)
class Meta:
indexes = [
FuncIndex(
expression=Lower('name'),
name='name_lower_idx',
),
]
Slide 34
Slide 34 text
db_index=
from django.db import models
class Author(models.Model):
name = models.CharField(
max_length=200,
db_index=HashIndex
)
Slide 35
Slide 35 text
Field.default_index_class
from django.contrib.postgres.fields import JSONField
from django.contrib.postgres.indexes import GinIndex
from django.db import models
# Somewhere in Django’s JSONField implementation:
# JSONField.default_index_class = GinIndex
class Document(models.Model):
data = JSONField(db_index=True)
Slide 36
Slide 36 text
Refactor index_together and
db_index
Slide 37
Slide 37 text
Add GiSTIndex
Slide 38
Slide 38 text
Sprints
April 6th - 7th
Slide 39
Slide 39 text
Thank You
Slide 40
Slide 40 text
I’m Markus Holtermann
@m_holtermann • github.com/MarkusH • markusholtermann.eu
@laterpay • laterpay.net
• Django Core Developer
• Software Engineer at
Slide 41
Slide 41 text
I’m Markus Holtermann
@m_holtermann • github.com/MarkusH • markusholtermann.eu
@laterpay • laterpay.net
• Django Core Developer
• Software Engineer at
W
e’re
hiring
Slide 42
Slide 42 text
Where We’re At
Slide 43
Slide 43 text
Functional Indexes
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=200)
class Meta:
indexes = [
FuncIndex(
expression=Lower(Col('name', None)),
name='name_lower_idx',
),
]