邹建等高手请帮看看

ChinaITOldMan 2009-09-10 02:34:25
I have a table containing production information that your users query frequently, They specifically use this
query most often (that is only use name to search in the where condition):
SELECT Name,Description,Vendor,Instock,Price FROM Products where Name='Jerry'--(查询时where后面只有Name这个条件)

Have a nonclustered index on this table on the Name column,but your users are complaining the query is still too slow,what can you do to speed it up?

A、modify the index to include the Description,vendor,Instock, and price columns as nonkey columns.
B、Create a new nonclustered index on the Description,vendor,Instock, and price as nonkey columns.
C、Create a new clustered index on the Description,vendor,Instock, and price as nonkey columns.
D、You can't do anything to speed up this query.

数据库是SQL SERVER,请问哪个答案是对的,请给出理由,谢谢。
...全文
125 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
ChinaITOldMan 2009-09-11
  • 打赏
  • 举报
回复
谢谢各位
shishui508 2009-09-10
  • 打赏
  • 举报
回复
the answer is A
asuyr 2009-09-10
  • 打赏
  • 举报
回复
这道题目出得有点问题:
1.如果在2000下,没有在索引页中增加非键值列一说,因此,最好的方法,创建一聚集索引,同时在name上增加一个索引,使用indexs seek +bookmark 查找方式,我认为是最快的,(引用的字段过多,不宜做复合索引).然而当该表的name字段存在重复值,且重复的记录数/总数值*100>60%.个人认为indexs+bookmark的IO开销与clustered scan的开销应该是差不多的.
所以在2000下,该题无合适答案.
2.在2005下,
A好像是最好的,但如果仍存在I/0开销严重的话,即存在大量的重复值的,就算做了include.查询结果未必就快了.
xuejiecn 2009-09-10
  • 打赏
  • 举报
回复
A可以,直接杳索引就行了,不用再进行表扫描。
翼帆 2009-09-10
  • 打赏
  • 举报
回复
sorry, i don't speak english! please say chinese! ths!
7761098 2009-09-10
  • 打赏
  • 举报
回复
a
zhengduan964532 2009-09-10
  • 打赏
  • 举报
回复
我有一个表包含产品信息,您的用户的查询频繁,他们专门使用这种

最常见的查询(即只使用名搜索在WHERE条件):

选择名称,描述,供应商的inStock,价格从产品在名称='Jerry' - (查询时在后面只有名字这个条件)



在此表上有一个非聚集索引的名称列,但您的用户抱怨查询仍然过于缓慢,您可以做什么办法可以加快?



a,修改该指数将包括说明,供应商的inStock,以及非键列价格列。

b,上创建一个描述,供应商的inStock,以及非键列价格的新的非聚集索引。

C上,创建了关于说明,供应商的inStock,以及非键列价格的新聚集索引。

D,您不能做任何事情,以加快此查询。

a
topest0302 2009-09-10
  • 打赏
  • 举报
回复
a
zhaoyh0530 2009-09-10
  • 打赏
  • 举报
回复
A 可以直接在索引页上得到这些数据..不用根据索引的Bookmark到数据页中找那些列的数据..
学习梁哥
SQL77 2009-09-10
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 haiwer 的回复:]
贴点帮助内容:

您可以通过将非键列添加到非聚集索引的叶级,扩展非聚集索引的功能。通过包含非键列,可以创建覆盖更多查询的非聚集索引。这是因为非键列具有下列优点:

它们可以是不允许作为索引键列的数据类型。


在计算索引键列数或索引键大小时,数据库引擎不考虑它们。


当查询中的所有列都作为键列或非键列包含在索引中时,带有包含性非键列的索引可以显著提高查询性能。这样可以实现性能提升,因为查询优化器可以在索引中找到所有列值;不访问表或聚集索引数据,从而减少磁盘 I/O 操作。


[/Quote]
学习
liangCK 2009-09-10
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 haiwer 的回复:]
贴点帮助内容:

您可以通过将非键列添加到非聚集索引的叶级,扩展非聚集索引的功能。通过包含非键列,可以创建覆盖更多查询的非聚集索引。这是因为非键列具有下列优点:

它们可以是不允许作为索引键列的数据类型。


在计算索引键列数或索引键大小时,数据库引擎不考虑它们。


当查询中的所有列都作为键列或非键列包含在索引中时,带有包含性非键列的索引可以显著提高查询性能。这样可以实现性能提升,因为查询优化器可以在索引中找到所有列值;不访问表或聚集索引数据,从而减少磁盘 I/O 操作。


[/Quote]

海爷.有空教教偶英文可以吗?
xupeihuagudulei 2009-09-10
  • 打赏
  • 举报
回复
帮顶下
htl258_Tony 2009-09-10
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 haiwer 的回复:]
贴点帮助内容:

您可以通过将非键列添加到非聚集索引的叶级,扩展非聚集索引的功能。通过包含非键列,可以创建覆盖更多查询的非聚集索引。这是因为非键列具有下列优点:

它们可以是不允许作为索引键列的数据类型。


在计算索引键列数或索引键大小时,数据库引擎不考虑它们。


当查询中的所有列都作为键列或非键列包含在索引中时,带有包含性非键列的索引可以显著提高查询性能。这样可以实现性能提升,因为查询优化器可以在索引中找到所有列值;不访问表或聚集索引数据,从而减少磁盘 I/O 操作。


[/Quote]
学习HY
昵称被占用了 2009-09-10
  • 打赏
  • 举报
回复
贴点帮助内容:

您可以通过将非键列添加到非聚集索引的叶级,扩展非聚集索引的功能。通过包含非键列,可以创建覆盖更多查询的非聚集索引。这是因为非键列具有下列优点:

它们可以是不允许作为索引键列的数据类型。


在计算索引键列数或索引键大小时,数据库引擎不考虑它们。


当查询中的所有列都作为键列或非键列包含在索引中时,带有包含性非键列的索引可以显著提高查询性能。这样可以实现性能提升,因为查询优化器可以在索引中找到所有列值;不访问表或聚集索引数据,从而减少磁盘 I/O 操作。

华夏小卒 2009-09-10
  • 打赏
  • 举报
回复
学习
aoyihuashao 2009-09-10
  • 打赏
  • 举报
回复
d
没办法,索引是为了提高查询时比较的效率的吧。
liangCK 2009-09-10
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 haiwer 的回复:]
对于2005+,索引include需要查询的字段是能提高速度的
[/Quote]

学习海爷.
liangCK 2009-09-10
  • 打赏
  • 举报
回复
Have a nonclustered index on this table on the Name column
--------
a
昵称被占用了 2009-09-10
  • 打赏
  • 举报
回复
对于2005+,索引include需要查询的字段是能提高速度的
加载更多回复(4)

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧