【发布时间】:2011-03-20 08:28:13
【问题描述】:
我有一张以 id 作为主键存储照片信息的表:
id(PK)、title、album_id、posted_by、 已发布、文件名、标签、评级、 发布日期
此表将保存 100+ 百万张照片和 我需要经常像这样运行这个查询:
1) 获取给定相册的所有照片(仅 id、文件名、标题列)
从照片中选择 ID、文件名、标题 其中 album_id = @AlbumId 和 已发布 = 1
2) 获取给定用户的所有已发布照片,但不包括当前查看相册的照片
从照片中选择 ID、文件名、标题 其中posted_by='bob'和album_id 10 和已发布 = 1
我想避免索引和表扫描。我需要尽可能多地使用 seek(比如 100%)。
这可以吗? 什么类型的索引以及在哪些列上可以帮助我实现这一目标?
谢谢
【问题讨论】:
-
Published 列的基数是多少? (也就是说,它可能包含哪些不同的值以及每个值有多少?)
-
AlbumId 和 posted_by 同上:对于每一列,可能有多少不同的值,以及任何给定值的行数?
-
published 是一个位类型的列:所以 1 或 0 AlbumId:会变得相当大,比如从 1 到 10M 的 1000 万张贴_by 是 varchar(20),所以我可以容纳非常大的用户
标签: sql indexing non-clustered-index