恕我直言,SQL Server可以自行选择(除非被告知)什么是最佳索引用于查询。SQL Server可以使用多个索引吗?
好
什么像这样(伪代码):
select __a from tbl where __a not in
(
select __b from tbl
)
(假设我们有index_1
这是(__a)
和index_2
这是(__b)
威尔SQL Server仍然使用一个索引执行或多个索引在一起...?
恕我直言,SQL Server可以自行选择(除非被告知)什么是最佳索引用于查询。SQL Server可以使用多个索引吗?
好
什么像这样(伪代码):
select __a from tbl where __a not in
(
select __b from tbl
)
(假设我们有index_1
这是(__a)
和index_2
这是(__b)
威尔SQL Server仍然使用一个索引执行或多个索引在一起...?
首先,创建表:
USE tempdb;
GO
CREATE TABLE dbo.tbl(__a INT, __b INT);
然后创建两个指标:
CREATE INDEX a_index ON dbo.tbl(__a);
CREATE INDEX b_index ON dbo.tbl(__b);
现在用一些数据来填充:
INSERT dbo.tbl(__a, __b)
SELECT [object_id], column_id
FROM sys.all_columns;
现在运行查询和转向实际执行计划。你会看到这样的事情,可见是,同时使用索引(其实在__B指数既用于子查询的数据检索和为寻求消除行):
一写你的查询更有效的方法是:
select __a from dbo.tbl AS t where not exists
(
select 1 from dbo.tbl AS t2
where t2.__b = t.__a
);
现在,这里是你的整个计划(同样,这两个指标的使用,但请注意有多少较少的操作):
非常感谢您的努力。对此,我真的非常感激。大+1。 – 2012-04-17 18:48:17
你为什么不看执行计划并亲自查看? – 2012-04-17 17:31:30
@MДΓΓБДLL告诉你这个问题,我不知道我在哪里可以在计划中找到这个信息......(哪一部分)? – 2012-04-17 17:32:13
http://stackoverflow.com/search?q=%5Bsql-server%5D+execution+plan – 2012-04-17 17:32:49