9

我正在将 Jet 数据库升级到 SQL Server Express 2008 R2,在此之前,我正在重新评估架构(它是在 1997-98 年设计的,设计它的人(即我)有点像白痴!)。

我的问题是关于具有两列复合键的 N:N 连接表。在 Jet 中,双列复合键的第一列上的连接将使用复合索引,但第二列上的连接不会,因此一般来说,在具有大量 N:N 连接表和相当多记录的 Jet 数据库中,除了复合索引之外,我在第二列上添加了第二个非唯一索引。

这是 SQL Server 中的一个好主意吗?

(也许在 Jet 中这不是一个好主意?)

4

3 回答 3

15

相同的规则适用于 SQL Server。如果您在 (ColumnA, ColumnB) 上有索引,则仅对 ColumnA 或 ColumnA 和 ColumnB 的查询可以使用该索引,但仅对 ColumnB 的查询不能。如果只需要加入 ColumnB,那么您绝对应该创建索引。

于 2010-08-31T20:55:41.157 回答
5

如果您对列有复合索引,则(A,B)不能将搜索、范围扫描、排序或聚合操作用于 B包含. 这对于 SQL Server 是正确的,就像对于 Jet (Red) 驱动程序也是如此(我认为对于Jet Blue也是如此)。其他一些引擎可能会在所谓的skip scan操作中使用它。

所以答案是你需要单独的索引(B)

于 2010-08-31T20:58:38.003 回答
4

为了帮助您更多,只是一个提示,在使用管理工作室的 SQL 服务器中,您可以通过“显示估计的执行计划”来评估性能。它展示了索引和连接是如何工作的。

您还可以使用 DTA(数据库引擎优化顾问)获取更多信息和优化。

于 2010-08-31T21:09:43.873 回答