所以我正在阅读索引及其实现,我偶然发现了这个简短解释b-tree索引的网站:
http://20bits.com/articles/interview-questions-database-indexes/
b-tree索引对于仅在单个列上的索引非常有意义,但是假设我创建了一个包含多列的索引,那么b-tree如何工作呢?b树中每个节点的价值是多少?
例如,如果我有这个表:
table customer:
id number
name varchar
phone_number varchar
city varchar
Run Code Online (Sandbox Code Playgroud)
我创建了一个索引:(id,name,city)
然后运行以下查询:
SELECT id, name
FROM customer
WHERE city = 'My City';
Run Code Online (Sandbox Code Playgroud)
该查询如何利用多列索引,或者除非将索引创建为(city,id,name)或(city,name,id),否则它不会使用它?
我怎样才能让SQL Server返回第一个值(任何一个,我不在乎,它只需要快速)聚合时会遇到什么?
例如,假设我有:
ID Group
1 A
2 A
3 A
4 B
5 B
Run Code Online (Sandbox Code Playgroud)
我需要为每个组获取任何一个ID.我可以这样做:
Select
max(id)
,group
from Table
group by group
Run Code Online (Sandbox Code Playgroud)
返回
ID Group
3 A
5 B
Run Code Online (Sandbox Code Playgroud)
这样做,但是当我要求SQL Server计算最高ID时,我真的需要做的就是选择它遇到的第一个ID,这似乎很愚蠢.
谢谢
PS - 字段被编入索引,所以它可能没有什么区别?
sql-server random aggregation sql-server-2008 sql-execution-plan