#30867: Old indexes should be dropped after new ones are created.
------------------------------------------------+------------------------
Reporter: Simon Charette | Owner: nobody
Type: Cleanup/optimization | Status: new
Component: Migrations | Version: master
Severity: Normal | Keywords:
Triage Stage: Unreviewed | Has patch: 0
Needs documentation: 0 | Needs tests: 0
Patch needs improvement: 0 | Easy pickings: 0
UI/UX: 0 |
------------------------------------------------+------------------------
When adding `unique=True` to a field previously `index=True` field or
vice-versa the old index is dropped before the new one is added.
This is not a big issue on backends that support transactional DDL but it
is on ones that don't because in between the execution of the two
statements the column is not indexed.
For example given the following model
{{{#!python
class Author(models.Model):
name = models.CharField(max_length=50, db_index=True)
}}}
Altering `name` to `models.CharField(max_length=50, unique=True)` will
generate the following SQL on MySQL
{{{#!sql
DROP INDEX `author_name_idx` ON `author`;
-- Until the following statement completes the name field is not indexed
at all.
-- This can take a while on large tables.
ALTER TABLE `author` ADD CONSTRAINT `author_name_uniq` UNIQUE (`name`);
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/30867>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/052.099fe91c28b50070f0fef6928c0fe9ec%40djangoproject.com.