【发布时间】:2020-04-23 09:55:00
【问题描述】:
我问 Django 是否为 ManyToMany 字段创建数据库索引...如果是,它是否为我在 through 中提供的模型执行此操作?
我只是想确保数据库在有大量数据时能够快速运行
【问题讨论】:
标签: python django python-3.x database django-models
我问 Django 是否为 ManyToMany 字段创建数据库索引...如果是,它是否为我在 through 中提供的模型执行此操作?
我只是想确保数据库在有大量数据时能够快速运行
【问题讨论】:
标签: python django python-3.x database django-models
它适用于普通 m2m 字段 - 无法确定“通过”表,因为我当前项目中没有任何表,也无权访问其他项目 ATM,但它仍然应该是这种情况因为这个索引对于 UNIQUE 约束是必需的。
FWIW,您可以通过查看数据库中的表定义(在 MySQL/mariadb 中使用 show create table yourtablename)轻松地自行检查它。
话虽如此,数据库索引仅在主要存在不同值时才有用,如果不是这种情况,实际上会降低性能(取决于您的数据库供应商等) - 例如,如果您有一个类似 3 或4 个可能的值(即“性别”或类似的东西),索引它可能不会产生预期的结果。对于 m2m 表来说应该不是问题,因为 (table1_id, table2_id) 对应该是唯一的,但关键是您不应该相信仅仅添加索引会自动提高您的性能 - 调整 SQL 数据库性能本身就是一种折衷,实际上很大程度上取决于您实际使用数据的方式。
【讨论】: