Kek*_*koa 4 django django-models
在Django模型中有一个很好的方法来指定特定的索引存储类型吗?
例如,MySQL的默认存储类型是BTREE,对于我的特定列,将HASH(哈希表)作为存储类型可能更有效.
没有创建自定义字段或修改django核心,我找不到一个好方法,这将为我做这件事.我也可以通过在创建表后修改索引来实现此目的.
这种情况对于大多数事情来说可能无关紧要,但是有些情况下哈希表是一种更有效的查找机制,当然,对列的排序要么不必要,要么没有意义.例如,具有随机生成数据的列通常不会对信息进行合理的排序(除非您正在寻找可重复的随机排序 - 但这不是重点).
看一下代码之后django.db.backends.mysql.creation.sql_indexes_for_field(),似乎没有办法在Django本身中指定索引类型(USING除非你想要后端的子类,否则无法在查询中获取参数).
解决此限制的最佳方法是在创建表之后修改索引,如您所建议的那样.您可以使用Django的特定于后端的初始SQL数据功能.只需在您的应用程序中创建一个"sql"目录,并创建一个<your_modelname>.mysql.sql在其中调用的SQL文件.然后将SQL用于修改索引类型,Django将在影响模型表的"syncdb"或"reset"调用之后执行它.
小智 6
当前接受的答案需要更新。另外,这看起来像是这个的重复: Python Django: how to select the index type?
不确定我能做什么,所以我将我的答案复制粘贴到其他线程:
自从提出问题以来,情况发生了很大变化。现在可以通过模型的元类在模型层中定义索引(至少从 django 1.11 开始): https ://docs.djangoproject.com/en/dev/ref/contrib/postgres/indexes/
例如:
from django.contrib.postgres.indexes import HashIndex
from django.db import models
class User(models.Model):
name = models.CharField(max_length=100)
class Meta:
indexes = (HashIndex(fields=('name',)),)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1242 次 |
| 最近记录: |