1
create table foo (id, name)
create table bar (id, foo_id, value, ...)
创建两次我们创造了foo_id
一个外键关系引用foo(id)
,这似乎是隐式创建为同一列的索引。我们还需要根据bar
中的foo_id, value
创建复合指数。指数获取某列
以上述方式声明索引还是有办法在上述情况下优化索引创建是否合理?
create table foo (id, name)
create table bar (id, foo_id, value, ...)
创建两次我们创造了foo_id
一个外键关系引用foo(id)
,这似乎是隐式创建为同一列的索引。我们还需要根据bar
中的foo_id, value
创建复合指数。指数获取某列
以上述方式声明索引还是有办法在上述情况下优化索引创建是否合理?
这取决于你如何使用它。 索引是为了加速查询的执行和外键是为了使您的数据库的内容保持一致。
当谈到外键,这里是Foreign Key constraints documentation部分:
InnoDB的需要外键索引和引用键使外键检查可以快速,不需要表扫描。
因此,创建外键时创建的索引一切正常。
是的,但它是有意义的有独自在foo_id指数,然后foo_id另一个指标,值 – priya
@priya:是的,这是有道理的,如果你执行使用这样的索引查询。那就是例如。涉及两列条件的查询('foo_id'和'value')。因为如果只有一列的索引,这样的查询会比有两列索引时执行得慢。 – Tadeck