Преглед изворни кода

Closes #11519: Add a SQL index for IPAddress host value

Jeremy Stretch пре 2 година
родитељ
комит
8f271151a7
2 измењених фајлова са 25 додато и 0 уклоњено
  1. 20 0
      netbox/ipam/migrations/0067_ipaddress_index_host.py
  2. 5 0
      netbox/ipam/models/ip.py

+ 20 - 0
netbox/ipam/migrations/0067_ipaddress_index_host.py

@@ -0,0 +1,20 @@
+# Generated by Django 4.1.10 on 2023-08-02 12:43
+
+from django.db import migrations, models
+import django.db.models.functions.comparison
+import ipam.fields
+import ipam.lookups
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('ipam', '0066_iprange_mark_utilized'),
+    ]
+
+    operations = [
+        migrations.AddIndex(
+            model_name='ipaddress',
+            index=models.Index(django.db.models.functions.comparison.Cast(ipam.lookups.Host('address'), output_field=ipam.fields.IPAddressField()), name='ipam_ipaddress_host'),
+        ),
+    ]

+ 5 - 0
netbox/ipam/models/ip.py

@@ -4,6 +4,7 @@ from django.contrib.contenttypes.models import ContentType
 from django.core.exceptions import ValidationError
 from django.db import models
 from django.db.models import F
+from django.db.models.functions import Cast
 from django.urls import reverse
 from django.utils.functional import cached_property
 from django.utils.translation import gettext_lazy as _
@@ -11,6 +12,7 @@ from django.utils.translation import gettext_lazy as _
 from ipam.choices import *
 from ipam.constants import *
 from ipam.fields import IPNetworkField, IPAddressField
+from ipam.lookups import Host
 from ipam.managers import IPAddressManager
 from ipam.querysets import PrefixQuerySet
 from ipam.validators import DNSValidator
@@ -778,6 +780,9 @@ class IPAddress(PrimaryModel):
 
     class Meta:
         ordering = ('address', 'pk')  # address may be non-unique
+        indexes = [
+            models.Index(Cast(Host('address'), output_field=IPAddressField()), name='ipam_ipaddress_host'),
+        ]
         verbose_name = 'IP address'
         verbose_name_plural = 'IP addresses'