【发布时间】:2014-01-25 11:46:24
【问题描述】:
我想知道在以下情况下同时定义这两种类型的索引有什么害处。
表Tasks:
TaskID (Primary, Auto Number)
OwnerID (Single Column Index)
AssignedToID (Single Column Index)
DateUpdated (Single Column Index)
TaskStatus (Single Column Index)
Mutli Column Index (AssignedToID, DateUpdated)
有以下主要查询...对DateUpdated 的查询是可选的。
- 管理员可以按日期过滤任务
-
单列索引 DateUpdated 被访问
WHERE DateUpdated <= startDate AND DateUpdated <= endDate ORDER BY DateUpdated DESC -
单列索引 DateUpdated 被访问
WHERE TaskStatus = 'Active' ORDER BY DateUpdated DESC 用户可以过滤仅分配给他们的任务
-
多列索引被访问
WHERE DateUpdated <= startDate AND DateUpdated <= endDate AND AssignedToID = userID ORDER BY DateUpdated DESC -
多列索引被访问
WHERE AssignedToID = userID AND TaskStatus = 'Active' ORDER BY DateUpdated DESC DateUpdated未在任何条件中引用-
单列索引
TaskID被访问WHERE AssignedToID = userID AND TaskStatus = 'Active' ORDER BY TaskID DESC
看起来我可以通过在某些频繁查询中定义多列索引来提高性能,我有以下问题。
- 同时定义组合索引和多个索引有什么坏处吗?
- 如果查询包含每个列的谓词,而不管查询中列的顺序如何,SQL 是否会优先考虑组合索引而不是单个索引合并?
- 如果您有任何两个索引都可能有害的示例,我想了解原因和方法,以便我可以相应地设计我的索引。
我的数据库操作是 95% 读取和 5% 写入,所以我不太担心索引写入性能问题,但我的读取性能是最重要的。
【问题讨论】:
标签: sql-server indexing