Sql 使用两列创建索引和在两列上创建单独索引之间的区别

Sql 使用两列创建索引和在两列上创建单独索引之间的区别,sql,sql-server,sql-server-2008,indexing,non-clustered-index,Sql,Sql Server,Sql Server 2008,Indexing,Non Clustered Index,使用两列创建索引和在两列上创建单独索引有什么区别 区别 create nonclustered index ix_index1 on table1(col1) create nonclustered index ix_index2 on table1(col2) 及 如果有任何查询仅基于col2进行选择,则可能会遇到不同 SELECT (list of columns) FROM dbo.YourTable WHERE col2 = 'someValue' 如果有两个单独的索引,则有可能使用

使用两列创建索引和在两列上创建单独索引有什么区别

区别

create nonclustered index ix_index1 on table1(col1)
create nonclustered index ix_index2 on table1(col2)


如果有任何查询仅基于
col2
进行选择,则可能会遇到不同

SELECT (list of columns)
FROM dbo.YourTable
WHERE col2 = 'someValue'
如果有两个单独的索引,则有可能使用
ix_index2
来加速此查询

但是,如果在
(col1,col2)
上只有一个复合索引,则该索引永远不能用于此查询。如果查询中引用了最左边的n列,则只能使用复合索引

所以可以使用复合索引

  • 如果查询在
    WHERE
    子句中同时使用
    col1
    col2
  • 如果查询在
    WHERE
    子句中仅使用
    col1

但是,如果您的查询只在
WHERE
子句中使用
col2
,那么它就永远不会被使用。如果查询根本不使用WHERE子句呢?那么您的索引就完全没有用了(除非您使用的
ORDER BY
子句使用了这些列中的一个或两个列)
SELECT (list of columns)
FROM dbo.YourTable
WHERE col2 = 'someValue'