【问题标题】:SQLAlchemy: does Column with ForeignKey creates index automatically?SQLAlchemy:带有 ForeignKey 的 Column 会自动创建索引吗?
【发布时间】:2012-01-17 06:54:41
【问题描述】:

带有 ForeignKey 的 Column 会自动创建索引吗? 或者我需要手动添加index=True

some_field = Column(Integer, ForeignKey(SomeModel.id))

谢谢!

【问题讨论】:

    标签: sqlalchemy


    【解决方案1】:

    您确实需要指定index=True 或显式创建Index 对象:
    Index('myindex', mytable.c.col1, mytable.c.col2, unique=True),这允许对索引的其他参数进行更多控制,例如名称和对多列的支持.

    更多信息请参见Indexes

    【讨论】:

    • Sqlalchemy 不会为您执行此操作,但 mysql 的 Inno 引擎会自动执行此操作。
    • 主键也是这样吗?
    • @BerislavLopac:我相信大多数(如果不是全部)RDBMS 会自动为主键创建索引。
    • @van:与 MySQL 的 InnoDB 引擎不同,Postgres不会为您创建外键索引。
    • @blong:看到这个答案,它涵盖了它:stackoverflow.com/a/42899045/99594
    【解决方案2】:

    正如 van 的回答所示,您应该按照文档的指示明确添加索引

    外键的实现是特定于数据库的,某些数据库(例如 MySQL) 仍会自动为外键列创建索引,但其他数据库不会。请参阅上面 cmets 中的讨论。

    例如来自MySQL docs:

    MySQL 要求对外键列进行索引;如果你创建一个 具有外键约束但在给定列上没有索引的表, 索引已创建。

    【讨论】:

      猜你喜欢
      • 2021-06-03
      • 2016-07-17
      • 2010-10-24
      • 2011-08-22
      • 1970-01-01
      • 2012-03-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多