【发布时间】:2016-02-21 23:09:54
【问题描述】:
假设我有一个包含大量行和 5 个字段的数据库 - State (A)、City (B)、Category (C)、Subcategory (D) 和 ID (E )。我将使用SELECT ID 之类的大量查询来解决它,其中WHERE 子句可以包含以下内容,并与ANDs 连接:
A
A,B
A,C
A,B,C
A,C,D
A,B,C,D
C
C,D
换句话说,由于列的层次结构的性质,它仅在包含 A 时才包含 B,并且仅在包含 C 时才包含 D。其中每一个都会返回一个 ID 列表,其中可能有很多行。
以下技术是否有益?
创建两个表,其中一个 (
X) 使用复合聚集索引(A,B),另一个 (Y) 使用复合聚集索引(C,D)参加我在
{A,B}(如果有的话)上的部分查询,并针对X;参加我对{C,D}(如果有的话)的查询并点击它 反对Y。如果我同时点击两个表(即查询包含
{A,B}的两个部分 和{C,D}),然后在ID上与两个表相交。
这会比只对整个表进行完全查询更有效吗?我还应该在X 和Y 上为ID 创建一个二级非聚集索引吗?
【问题讨论】:
-
不要认为您可以通过拆分单独的表、拆分临时表的特殊排序处理等来超越查询优化器。大多数情况下,如果您正确索引表(可能包括分区表),一切都在幕后工作,你不需要复杂的过程。有时你需要让它变得复杂,但首先尝试正确索引。
标签: sql sql-server