如何最好地索引与其他表具有动态关系的表中的列?

乔纳森·沃尔姆斯利

我们的某些表与其他表具有动态关系。

例如,我们有一个地址表来存储所有地址,其中有两个“链接”字段,entity_id和entity_key_id,用于将地址链接到其他表。

例如,“成员”可能是entity_id 1,“组织”可能是实体id 2,因此,如果我们要存储成员地址,则该行将具有entity_id = 1和entity_key_id = mem_id(mem表的pk),但是如果我们正在存储组织地址,则该行将具有entity_id = 2,entity_key_id将存储组织表的pk)。

我将如何最好地对此进行索引?我是否应该有2个索引-一个用于entity_id,一个用于enterity_key_id?还是将两个列都包含在一个索引中会更好,如果这样,按什么顺序?

该数据库是SQL Server 2008 R2

用户名

这取决于您要针对该数据库运行的查询。您可以使用Tuning Adviser(https://msdn.microsoft.com/zh-cn/library/ms166575 ( v=sql.100 ) .aspx),它会有所帮助。

但是通常,您应该为谓词(WHERE)和选择的列按顺序对各列进行索引这里有些例子。

SELECT ... from table1 where table1.column1=.. and table1.column2=..

在这里您应该有column1, column2索引,因此DB将能够首先找到所有索引column1,然后column2直接从索引中查找所有索引。您可能也有column1索引,但是在这种情况下,数据库将首先column1从索引中读取,然后进入表本身,这比较慢。

但是,如果您有column2, column42, column1索引,则该索引将不被使用,因为数据库无法满足您的WHERE条件。

在索引中包含列也很好。

select column1 from table1 where column2=...与index一起运行column2, column1将使DB能够从index中读取两列,甚至不需要触摸表!很快 但是,如果您更改此索引中的顺序,则在DB需要时column2(根据WHERE将不会使用该顺序

您应该始终通过探查器来获取执行计划:使用https://msdn.microsoft.com/zh-cn/library/ms181091(v=sql.100).aspx:不仅可以帮助您找到瓶颈,而且可以教您如何DB优化器使用不确定性。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何删除与其他表具有外键关系的All()记录

来自分类Dev

在HIVE中创建与其他表具有相同列的表?

来自分类Dev

SQL选择具有与其他表中的列值匹配的列值的行

来自分类Dev

SQL选择具有与其他表中的列值匹配的列值的行

来自分类Dev

如何在多对多关系中查找列中的所有相同值,并将表与其他三个表连接起来?

来自分类Dev

Spring Boot H2 创建与其他表具有多对多关系的日志表

来自分类Dev

如何删除与其他表有多对多关系的实体?

来自分类Dev

如何在与其他相同类型具有其他关系的类型中定义EF多对多关系

来自分类Dev

如何为表建模以使其具有0对多关系的其他表共享?

来自分类Dev

如何从具有其他条件的表中删除多行?

来自分类Dev

如何根据其他表中的其他关系从 1 列中选择 2 个数据

来自分类Dev

在关系数据库中,我们可以有一个与其他表没有任何关系的表吗?

来自分类Dev

如何在基于一个列的其他表中查找具有相同值的表名

来自分类Dev

创建新表时,如何默认具有其他表的列值的列?

来自分类Dev

动态地将行添加到具有动态接收的列数的表中

来自分类Dev

当表有多行与其他表中的单个记录相关时,如何显示一行?

来自分类Dev

如何从具有其他表条件的表中选择

来自分类Dev

如何从其他数据表创建具有列结构的新数据表?

来自分类Dev

如何从其他数据表创建具有列结构的新数据表?

来自分类Dev

如何计算表中具有其他表中特定属性的行

来自分类Dev

MySQL:将新列插入到具有其他表默认值的表中

来自分类Dev

使用PHP将表插入到具有更多列的其他表中

来自分类Dev

实体框架5和代码优先-无法将记录添加到与其他表有关系的表中

来自分类Dev

如何在Angular中创建具有可变数量的列和动态标题的表?最好使用ng-tables

来自分类Dev

与其他列无关,在Sap.m.表中添加带有SR.NO的列

来自分类Dev

动态LINQ Where查询与其他表的联接

来自分类Dev

如何在Symfony中的多对多关系的中介表中创建其他列?

来自分类Dev

具有带有其他列的子表的Bootstrap表

来自分类Dev

从其他表中选择具有动态名称的行作为新表中与articleId匹配的列名

Related 相关文章

  1. 1

    如何删除与其他表具有外键关系的All()记录

  2. 2

    在HIVE中创建与其他表具有相同列的表?

  3. 3

    SQL选择具有与其他表中的列值匹配的列值的行

  4. 4

    SQL选择具有与其他表中的列值匹配的列值的行

  5. 5

    如何在多对多关系中查找列中的所有相同值,并将表与其他三个表连接起来?

  6. 6

    Spring Boot H2 创建与其他表具有多对多关系的日志表

  7. 7

    如何删除与其他表有多对多关系的实体?

  8. 8

    如何在与其他相同类型具有其他关系的类型中定义EF多对多关系

  9. 9

    如何为表建模以使其具有0对多关系的其他表共享?

  10. 10

    如何从具有其他条件的表中删除多行?

  11. 11

    如何根据其他表中的其他关系从 1 列中选择 2 个数据

  12. 12

    在关系数据库中,我们可以有一个与其他表没有任何关系的表吗?

  13. 13

    如何在基于一个列的其他表中查找具有相同值的表名

  14. 14

    创建新表时,如何默认具有其他表的列值的列?

  15. 15

    动态地将行添加到具有动态接收的列数的表中

  16. 16

    当表有多行与其他表中的单个记录相关时,如何显示一行?

  17. 17

    如何从具有其他表条件的表中选择

  18. 18

    如何从其他数据表创建具有列结构的新数据表?

  19. 19

    如何从其他数据表创建具有列结构的新数据表?

  20. 20

    如何计算表中具有其他表中特定属性的行

  21. 21

    MySQL:将新列插入到具有其他表默认值的表中

  22. 22

    使用PHP将表插入到具有更多列的其他表中

  23. 23

    实体框架5和代码优先-无法将记录添加到与其他表有关系的表中

  24. 24

    如何在Angular中创建具有可变数量的列和动态标题的表?最好使用ng-tables

  25. 25

    与其他列无关,在Sap.m.表中添加带有SR.NO的列

  26. 26

    动态LINQ Where查询与其他表的联接

  27. 27

    如何在Symfony中的多对多关系的中介表中创建其他列?

  28. 28

    具有带有其他列的子表的Bootstrap表

  29. 29

    从其他表中选择具有动态名称的行作为新表中与articleId匹配的列名

热门标签

归档