gpt4 book ai didi

sql-server - sql server 多列索引查询

转载 作者:搜寻专家 更新时间:2023-10-30 19:40:33 25 4
gpt4 key购买 nike

如果我按顺序在 [lastName] 和 [firstName] 两列上创建了一个索引。如果我然后查询以查找名字为 daniel 的人数:

SELECT count(*)
FROM people
WHERE firstName = N'daniel'

此搜索是否会在第一个索引(姓氏)的每个部分中搜索并使用二级索引(名字)快速搜索姓氏条目的每个 block ?

这似乎是一件显而易见的事情,我假设这就是发生的事情,但你知道他们对假设的看法。

最佳答案

是的,如果查询优化器认为最好“快速搜索每个 block 姓氏条目”,正如您所说的那样(执行完整扫描)表。

(firstName) 上的索引对于这个特定的查询会更有效,所以如果有这样的索引,SQL-Server 将使用该索引(并执行 Index Seek).


在 SQL-Server 2008 R2 Express 版中测试:

CREATE TABLE Test.dbo.people
( lastName NVARCHAR(30) NOT NULL
, firstName NVARCHAR(30) NOT NULL
) ;

INSERT INTO people
VALUES
('Johnes', 'Alex'),
... --- about 300 rows
('Johnes', 'Bill'),
('Brown', 'Bill') ;

没有任何索引的查询,表扫描:

SELECT count(*)
FROM people
WHERE firstName = N'Bill' ;

enter image description here


使用 (lastName, firstName) 上的索引进行查询,索引扫描:

CREATE INDEX last_first_idx
ON people (lastName, firstName) ;

SELECT ...

enter image description here

使用 (firstName) 上的索引进行查询,Index Seek:

CREATE INDEX first_idx
ON people (firstName) ;

SELECT ...

enter image description here

关于sql-server - sql server 多列索引查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11773375/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com