我正在开发移动应用程序的后端。我已经为应用程序创建了表结构。
如何为创建的表实现索引?我知道 SQL 中有两种类型的索引。集群和非集群。
我担心的是
- 我应该为我的表提供什么类型的索引?
- 应该索引哪些列?
- 我是否需要为“唯一标识符”类型的列应用索引?
- 我需要为主键列应用索引吗?
- 如何评估索引性能?
任何帮助将不胜感激
我正在开发移动应用程序的后端。我已经为应用程序创建了表结构。
如何为创建的表实现索引?我知道 SQL 中有两种类型的索引。集群和非集群。
我担心的是
任何帮助将不胜感激
我总是建议在你的表上放置一个聚集索引——它只会让一切变得更快(参见 Kimberly Tripp 的博客文章)。
一个好的聚集索引是:
所以像这样的列ID INT IDENTITY
是完美的(再次:请参阅 Kimberly Tripp 的博客文章,了解为什么这些属性对集群索引至关重要)。
接下来,我将在任何外键列上放置一个非聚集索引。这加快了 JOIN 和其他与参照完整性相关的操作。
然后停止- 让您的应用程序运行、观察、测量性能。它的行为如何?获取配置文件日志以查看执行了哪些查询以及哪些查询在 I/O 和/或 CPU 时间上过于繁重。
然后继续优化这些查询——也许在这里和那里添加一个索引来加速一两个查询。然后再次观察和测量 - 无限重复。
要了解更多信息-请阅读 Kimberly Tripp 的博客并观看她在会议上的演示视频 - 她是SQL Server索引女王,她的知识和见解是无价的。阅读她的东西,反思 - 使用它。
对于一个表,您可以从 sql 2008 开始创建 1 个聚集索引和 999 个非聚集索引。
请记住,如果表在任何列上包含主键,则将创建自动聚集索引。如果表不包含任何主键,则在整数数据类型列上创建聚集索引。请记住,如果表包含唯一约束,则会在这些唯一约束列上自动创建非聚集索引。
最后,如果您的表不包含任何主键,则在任何整数数据类型列上创建聚集索引。
然后进入非聚集索引,如果您的表包含唯一约束,那么将自动创建非聚集索引,否则将保留它,即不要创建非聚集索引。因为太多的非聚集索引会导致将来出现性能问题,即每天的数据都会增加。
创建表后,您将在查询中使用此表。在这些查询中,您可以编写 where 条件,对于 where 条件列,您只需创建非聚集索引。
永远记住,如果表不包含聚集索引,则不能期望使用非聚集索引来提高性能。
还有一点是始终尝试使用 1 个聚集索引,每个表最多使用 5 到 7 个非聚集索引。
不要为表中的所有列创建非聚集索引。