2,596
社区成员
发帖
与我相关
我的任务
分享
CREATE INDEX name
ON Employees ( Surname, GivenName );
如果第一列不能单独提供较高的选择性,复合索引将会非常有用。例如,如果许多雇员都同姓,则 Surname 和 GivenName 上的复合索引非常有用。因为每个雇员都有唯一的 ID,所以 EmployeeID 和 Surname 上的复合索引可能没有用处,因此列 Surname 不会提供任何附加选择性。CREATE INDEX IX_GivenName_Surname
ON Employees ( GivenName, Surname );
CREATE INDEX IX_Surname_GivenName
ON Employees ( Surname, GivenName );
假定您需要搜索指定的名字 John。唯一有用的索引是在索引的第一列包含指定名字的索引。由于名为 John 的雇员会出现在索引中的任意位置,因此先按姓再按名组织的索引没有用处。ASC、ASC ASC、ASC 或 DESC、DESC ASC、DESC 或 DESC、ASC
ASC、DESC ASC、DESC 或 DESC、ASC ASC、ASC 或 DESC、DESC
DESC、ASC DESC、ASC 或 ASC、DESC ASC、ASC 或 DESC、DESC
DESC、DESC DESC、DESC 或 ASC、ASC ASC、DESC 或 DESC、ASC
CREATE INDEX idx_example
ON table1 ( col1 ASC, col2 DESC, col3 ASC );
在这种情况下,以下查询可以得到优化:SELECT col1, col2, col3 FROM table1
ORDER BY col1 ASC, col2 DESC, col3 ASC;
SELECT col1, col2, col3 FROM example
ORDER BY col1 DESC, col2 ASC, col3 DESC;
索引不用于优化在 ORDER BY 子句中具有 ASC 和 DESC 的任何其它模式的查询。例如,以下语句不会被优化:SELECT col1, col2, col3 FROM table1
ORDER BY col1 ASC, col2 ASC, col3 ASC;