-1

我正在开发移动应用程序的后端。我已经为应用程序创建了表结构。

如何为创建的表实现索引?我知道 SQL 中有两种类型的索引。集群和非集群。

我担心的是

  1. 我应该为我的表提供什么类型的索引?
  2. 应该索引哪些列?
  3. 我是否需要为“唯一标识符”类型的列应用索引?
  4. 我需要为主键列应用​​索引吗?
  5. 如何评估索引性能?

任何帮助将不胜感激

4

2 回答 2

5

总是建议在你的表上放置一个聚集索引——它只会让一切变得更快(参见 Kimberly Tripp 的博客文章)。

一个好的聚集索引是:

  • 狭窄
  • 独特的
  • 稳定的
  • 不断增加

所以像这样的列ID INT IDENTITY是完美的(再次:请参阅 Kimberly Tripp 的博客文章,了解为什么这些属性对集群索引至关重要)。

接下来,我将在任何外键列上放置一个非聚集索引。这加快了 JOIN 和其他与参照完整性相关的操作。

然后停止- 让您的应用程序运行、观察、测量性能。它的行为如何?获取配置文件日志以查看执行了哪些查询以及哪些查询在 I/O 和/或 CPU 时间上过于繁重。

然后继续优化这些查询——也许在这里和那里添加一个索引来加速一两个查询。然后再次观察和测量 - 无限重复。

要了解更多信息-请阅读 Kimberly Tripp 的博客并观看她在会议上的演示视频 - 她是SQL Server索引女王,她的知识和见解是无价的。阅读她的东西,反思 - 使用它。

于 2012-11-27T13:02:17.530 回答
0

对于一个表,您可以从 sql 2008 开始创建 1 个聚集索引和 999 个非聚集索引。

请记住,如果表在任何列上包含主键,则将创建自动聚集索引。如果表不包含任何主键,则在整数数据类型列上创建聚集索引。请记住,如果表包含唯一约束,则会在这些唯一约束列上自动创建非聚集索引。

最后,如果您的表不包含任何主键,则在任何整数数据类型列上创建聚集索引。

然后进入非聚集索引,如果您的表包含唯一约束,那么将自动创建非聚集索引,否则将保留它,即不要创建非聚集索引。因为太多的非聚集索引会导致将来出现性能问题,即每天的数据都会增加。

创建表后,您将在查询中使用此表。在这些查询中,您可以编写 where 条件,对于 where 条件列,您只需创建非聚集索引。

永远记住,如果表不包含聚集索引,则不能期望使用非聚集索引来提高性能。

还有一点是始终尝试使用 1 个聚集索引,每个表最多使用 5 到 7 个非聚集索引。

不要为表中的所有列创建非聚集索引。

于 2012-11-27T13:15:22.587 回答