不理解

small_agile 2011-05-15 09:39:53
动作描述 使用聚集索引 使用非聚集索引  

列经常被分组排序 应 应

返回某范围内的数据 应 不应

一个或极少不同值 不应 不应

小数目的不同值 应 不应

大数目的不同值 不应 应

频繁更新的列 不应 应

外键列 应 应

主键列 应 应

频繁修改索引列 不应 应

为什么会是这样呢?
...全文
169 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
--小F-- 2011-05-15
  • 打赏
  • 举报
回复
使用聚集索引和非聚集索引的区别
使用聚集索引

聚集索引确定表中数据的物理顺序。聚集索引类似于电话簿。由于聚集索引规定数据在表中的物理存储顺序,因此一个表只能包含一个聚集索引。但该索引可以包含多个列(组合索引),就像电话簿按姓氏和名字进行组织一样。

聚集索引对于那些经常要搜索范围值的列特别有效。使用聚集索引找到包含第一个值的行后,便可以确保包含后续索引值的行在物理相邻。避免每次查询该列时都进行排序,从而节省成本。

注意事项
定义聚集索引键时使用的列越少越好。
1、包含大量非重复值的列。
2、使用下列运算符返回一个范围值的查询:BETWEEN、>、>=、< 和 <=。
3、被连续访问的列。
4、返回大型结果集的查询。
5、经常被使用联接或 GROUP BY 子句的查询访问的列;一般来说,这些是外键列。对 ORDER BY 或 GROUP BY 子句中指定的列进行索引,可以使 SQL Server 不必对数据进行排序,因为这些行已经排序。这样可以提高查询性能。
6、OLTP 类型的应用程序,这些程序要求进行非常快速的单行查找(一般通过主键)。应在主键上创建聚集索引。


聚集索引不适用于:

1、频繁更改的列 。这将导致整行移动(因为 SQL Server 必须按物理顺序保留行中的数据值)。这一点要特别注意,因为在大数据量事务处理系统中数据是易失的。

2、宽键 。来自聚集索引的键值由所有非聚集索引作为查找键使用,因此存储在每个非聚集索引的叶条目内。

使用非聚集索引

非聚集索引与课本中的目录类似。数据存储在一个地方,索引存储在另一个地方,索引带有指针指向数据的存储位置。索引中的项目按索引键值的顺序存储,而表中的信息按另一种顺序存储(这可以由聚集索引规定)。如果在表中未创建聚集索引,则无法保证这些行具有任何特定的顺序。

多个非聚集索引
有些书籍包含多个索引。例如,一本介绍园艺的书可能会包含一个植物通俗名称索引,和一个植物学名索引,因为这是读者查找信息的两种最常用的方法。对于非聚集索引也是如此。可以为在表中查找数据时常用的每个列创建一个非聚集索引。


注意事项

在创建非聚集索引之前,应先了解您的数据是如何被访问的。可考虑将非聚集索引用于:
? 包含大量非重复值的列,如姓氏和名字的组合(如果聚集索引用于其它列)。如果只有很少的非重复值,如只有 1 和 0,则大多数查询将不使用索引,因为此时表扫描通常更有效。
? 不返回大型结果集的查询。
? 返回精确匹配的查询的搜索条件(WHERE 子句)中经常使用的列。
? 经常需要联接和分组的决策支持系统应用程序。应在联接和分组操作中使用的列上创建多个非聚集索引,在任何外键列上创建一个聚集索引。
? 在特定的查询中覆盖一个表中的所有列。这将完全消除对表或聚集索引的访问。

索引都是一种排序,只是聚集索引的排序和物理表中的数据排序相同,一致的;而非聚集索引的排序和物理表数据的排序不同。

当我们在更新统计信息的时候,对于那些聚集索引列不但要更新索引页还要同时对数据物理表数据重新排序;而对非聚集索引列则只需要更新索引页
--小F-- 2011-05-15
  • 打赏
  • 举报
回复
使用聚集索引和非聚集索引的区别
使用聚集索引

聚集索引确定表中数据的物理顺序。聚集索引类似于电话簿。由于聚集索引规定数据在表中的物理存储顺序,因此一个表只能包含一个聚集索引。但该索引可以包含多个列(组合索引),就像电话簿按姓氏和名字进行组织一样。

聚集索引对于那些经常要搜索范围值的列特别有效。使用聚集索引找到包含第一个值的行后,便可以确保包含后续索引值的行在物理相邻。避免每次查询该列时都进行排序,从而节省成本。

注意事项
定义聚集索引键时使用的列越少越好。
1、包含大量非重复值的列。
2、使用下列运算符返回一个范围值的查询:BETWEEN、>、>=、< 和 <=。
3、被连续访问的列。
4、返回大型结果集的查询。
5、经常被使用联接或 GROUP BY 子句的查询访问的列;一般来说,这些是外键列。对 ORDER BY 或 GROUP BY 子句中指定的列进行索引,可以使 SQL Server 不必对数据进行排序,因为这些行已经排序。这样可以提高查询性能。
6、OLTP 类型的应用程序,这些程序要求进行非常快速的单行查找(一般通过主键)。应在主键上创建聚集索引。


聚集索引不适用于:

1、频繁更改的列 。这将导致整行移动(因为 SQL Server 必须按物理顺序保留行中的数据值)。这一点要特别注意,因为在大数据量事务处理系统中数据是易失的。

2、宽键 。来自聚集索引的键值由所有非聚集索引作为查找键使用,因此存储在每个非聚集索引的叶条目内。

使用非聚集索引

非聚集索引与课本中的目录类似。数据存储在一个地方,索引存储在另一个地方,索引带有指针指向数据的存储位置。索引中的项目按索引键值的顺序存储,而表中的信息按另一种顺序存储(这可以由聚集索引规定)。如果在表中未创建聚集索引,则无法保证这些行具有任何特定的顺序。

多个非聚集索引
有些书籍包含多个索引。例如,一本介绍园艺的书可能会包含一个植物通俗名称索引,和一个植物学名索引,因为这是读者查找信息的两种最常用的方法。对于非聚集索引也是如此。可以为在表中查找数据时常用的每个列创建一个非聚集索引。


注意事项

在创建非聚集索引之前,应先了解您的数据是如何被访问的。可考虑将非聚集索引用于:
? 包含大量非重复值的列,如姓氏和名字的组合(如果聚集索引用于其它列)。如果只有很少的非重复值,如只有 1 和 0,则大多数查询将不使用索引,因为此时表扫描通常更有效。
? 不返回大型结果集的查询。
? 返回精确匹配的查询的搜索条件(WHERE 子句)中经常使用的列。
? 经常需要联接和分组的决策支持系统应用程序。应在联接和分组操作中使用的列上创建多个非聚集索引,在任何外键列上创建一个聚集索引。
? 在特定的查询中覆盖一个表中的所有列。这将完全消除对表或聚集索引的访问。

索引都是一种排序,只是聚集索引的排序和物理表中的数据排序相同,一致的;而非聚集索引的排序和物理表数据的排序不同。

当我们在更新统计信息的时候,对于那些聚集索引列不但要更新索引页还要同时对数据物理表数据重新排序;而对非聚集索引列则只需要更新索引页
dawogui 2011-05-15
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 small_agile 的回复:]
不是都应该加上一个前提就是:‘存在一定的物理顺序’ 呢?
[/Quote]
索引:另有一表,形成一序(物理顺序),各行指向所依据的索引列值在原表中各行的位置.
聚集索引:同索引,但其排列的物理顺序与原表中的排列物理顺序一致.其实是,原表中的排列顺序要与该索引排列序一致.
这样,一个表只能有一个聚集索引,以该索引进行查询,速度是最快的,因而常分配给查询最频繁的列.
small_agile 2011-05-15
  • 打赏
  • 举报
回复
不是都应该加上一个前提就是:‘存在一定的物理顺序’ 呢?
叶子 2011-05-15
  • 打赏
  • 举报
回复

动作描述 使用聚集索引 使用非聚集索引
------------------ ------ -------
列经常被分组排序 应 应
返回某范围内的数据 应 不应
一个或极少不同值 不应 不应
小数目的不同值 应 不应
大数目的不同值 不应 应
频繁更新的列 不应 应
外键列 应 应
主键列 应 应
频繁修改索引列 不应 应



首先你要知道聚集索引和非聚集索引的概念
然后根据列的使用情况,
来判断什么时候使用聚集索引,什么时候使用非聚集索引
small_agile 2011-05-15
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20080416/08/24b62a73-ab5a-4927-97af-81e7e790445d.html
大侠门,我还是不懂啊!
dawogui 2011-05-15
  • 打赏
  • 举报
回复
动作描述 使用聚集索引 使用非聚集索引  

列经常被分组排序 应 应 最好使用聚集索引,但如果表中已经有其他列使用了聚集索引,则应使用非聚集索引而不是不创建索引

返回某范围内的数据 应 不应 此对不懂,仅帮顶

一个或极少不同值 不应 不应 该列差不多都是相同的,排序方便,加了索引反而增大数据库容量

小数目的不同值 应 不应 同2

大数目的不同值 不应 应 同2

频繁更新的列 不应 应 频繁更新,如用了聚集索引,则更新时间会非常长,只应使用非聚集索引

外键列 应 应 同2

主键列 应 应 同1

频繁修改索引列 不应 应 同6

这些玩艺儿从何而来?
叶子 2011-05-15
  • 打赏
  • 举报
回复
就是描述什么时候应该使用聚集索引
q10777054O 2011-05-15
  • 打赏
  • 举报
回复
不理解
small_agile 2011-05-15
  • 打赏
  • 举报
回复
上班来,姐姐贴。

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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