社区
MS-SQL Server
帖子详情
请教:我在一个表的字段建立索引,可是...
Sodes
2003-08-26 02:36:05
我建立索引后,可是用“企业管理器”打开时,却不是按索引
进行排序的。那么索引是不是没起作用?难道非要order by?
...全文
77
8
打赏
收藏
请教:我在一个表的字段建立索引,可是...
我建立索引后,可是用“企业管理器”打开时,却不是按索引 进行排序的。那么索引是不是没起作用?难道非要order by?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Sodes
2003-08-26
打赏
举报
回复
非聚集索引与聚集索引在where 条件的检索中,检索速度是一样的吗?
txlicenhe
2003-08-26
打赏
举报
回复
聚集索引
建聚集索引的这些字段的值不能有重复。
lynx1111
2003-08-26
打赏
举报
回复
http://expert.csdn.net/Expert/topic/1693/1693812.xml?temp=.3920404
txlicenhe
2003-08-26
打赏
举报
回复
聚集索引
建聚集索引的这些字段的值不能有重复。
sdhdy
2003-08-26
打赏
举报
回复
使用聚集索引
聚集索引确定表中数据的物理顺序。聚集索引类似于电话簿,后者按姓氏排列数据。由于聚集索引规定数据在表中的物理存储顺序,因此一个表只能包含一个聚集索引。但该索引可以包含多个列(组合索引),就像电话簿按姓氏和名字进行组织一样。
聚集索引对于那些经常要搜索范围值的列特别有效。使用聚集索引找到包含第一个值的行后,便可以确保包含后续索引值的行在物理相邻。例如,如果应用程序执行的一个查询经常检索某一日期范围内的记录,则使用聚集索引可以迅速找到包含开始日期的行,然后检索表中所有相邻的行,直到到达结束日期。这样有助于提高此类查询的性能。同样,如果对从表中检索的数据进行排序时经常要用到某一列,则可以将该表在该列上聚集(物理排序),避免每次查询该列时都进行排序,从而节省成本。
当索引值唯一时,使用聚集索引查找特定的行也很有效率。例如,使用唯一雇员 ID 列 emp_id 查找特定雇员的最快速的方法,是在 emp_id 列上创建聚集索引或 PRIMARY KEY 约束。
说明 如果该表上尚未创建聚集索引,且在创建 PRIMARY KEY 约束时未指定非聚集索引,PRIMARY KEY 约束会自动创建聚集索引。
也可以在 lname(姓氏)列和 fname(名字)列上创建聚集索引,因为雇员记录常常是按姓名而不是按雇员 ID 分组和查询的。
注意事项
定义聚集索引键时使用的列越少越好,这一点很重要。如果定义了一个大型的聚集索引键,则同一个表上定义的任何非聚集索引都将增大许多,因为非聚集索引条目包含聚集键。当把 SQL 脚本保存到可用空间不足的磁盘上时,索引优化向导不返回错误。有关 Microsoft® SQL Server™ 2000 中如何实现非聚集索引的更多信息,请参见非聚集索引。
在分析过程中,索引优化向导会消耗相当多的 CPU 及内存资源。最好在生产服务器的测试版上执行优化,而不要在生产服务器上执行。此外,最好在另一台计算机上而非运行 SQL Server 的计算机上运行该向导。该向导不能用于在 SQL Server 6.5 版或更早版本的数据库中选择或创建索引及统计信息。
在创建聚集索引之前,应先了解您的数据是如何被访问的。可考虑将聚集索引用于:
包含大量非重复值的列。
使用下列运算符返回一个范围值的查询:BETWEEN、>、>=、< 和 <=。
被连续访问的列。
返回大型结果集的查询。
经常被使用联接或 GROUP BY 子句的查询访问的列;一般来说,这些是外键列。对 ORDER BY 或 GROUP BY 子句中指定的列进行索引,可以使 SQL Server 不必对数据进行排序,因为这些行已经排序。这样可以提高查询性能。
OLTP 类型的应用程序,这些程序要求进行非常快速的单行查找(一般通过主键)。应在主键上创建聚集索引。
聚集索引不适用于:
频繁更改的列
这将导致整行移动(因为 SQL Server 必须按物理顺序保留行中的数据值)。这一点要特别注意,因为在大数据量事务处理系统中数据是易失的。
宽键
来自聚集索引的键值由所有非聚集索引作为查找键使用,因此存储在每个非聚集索引的叶条目内。
lynx1111
2003-08-26
打赏
举报
回复
簇集索引=聚集索引:
聚集索引确定表中数据的物理顺序。聚集索引类似于电话簿,后者按姓氏排列数据。由于聚集索引规定数据在表中的物理存储顺序,因此一个表只能包含一个聚集索引。但该索引可以包含多个列(组合索引),就像电话簿按姓氏和名字进行组织一样。
聚集索引对于那些经常要搜索范围值的列特别有效。使用聚集索引找到包含第一个值的行后,便可以确保包含后续索引值的行在物理相邻。例如,如果应用程序执行的一个查询经常检索某一日期范围内的记录,则使用聚集索引可以迅速找到包含开始日期的行,然后检索表中所有相邻的行,直到到达结束日期。这样有助于提高此类查询的性能。同样,如果对从表中检索的数据进行排序时经常要用到某一列,则可以将该表在该列上聚集(物理排序),避免每次查询该列时都进行排序,从而节省成本。
非簇集索引:
非聚集索引与聚集索引一样有 B 树结构,但是有两个重大差别:
数据行不按非聚集索引键的顺序排序和存储。
非聚集索引的叶层不包含数据页。
相反,叶节点包含索引行。每个索引行包含非聚集键值以及一个或多个行定位器,这些行定位器指向有该键值的数据行(如果索引不唯一,则可能是多行)。
非聚集索引可以在有聚集索引的表、堆集或索引视图上定义。在 Microsoft® SQL Server™ 2000 中,非聚集索引中的行定位器有两种形式:
如果表是堆集(没有聚集索引),行定位器就是指向行的指针。该指针用文件标识符 (ID)、页码和页上的行数生成。整个指针称为行 ID。
如果表没有聚集索引,或者索引在索引视图上,则行定位器就是行的聚集索引键。如果聚集索引不是唯一的索引,SQL Server 2000 将添加在内部生成的值以使重复的键唯一。用户看不到这个值,它用于使非聚集索引内的键唯一。SQL Server 通过使用聚集索引键搜索聚集索引来检索数据行,而聚集索引键存储在非聚集索引的叶行内。
由于非聚集索引将聚集索引键作为其行指针存储,因此使聚集索引键尽可能小很重要。如果表还有非聚集索引,请不要选择大的列作为聚集索引的键。
唯一索引:
唯一索引可以确保索引列不包含重复的值。在多列唯一索引的情况下,该索引可以确保索引列中每个值组合都是唯一的。
唯一索引既是索引也是约束。
复合索引:
索引项是多个的就叫组合索引,也叫复合索引。
复合索引使用时需要注意索引项的次序。
Sodes
2003-08-26
打赏
举报
回复
聚集索引是什么意思?
sdhdy
2003-08-26
打赏
举报
回复
如果你建的是聚集索引的话,记录是按索引进行排序的。
数据库实训小结.doc
每
一个
细节都可能导致系统运行出错,需要细心检查和测试。遇到问题时,需要有耐心去查阅资料,向他人
请教
,即使问题是基础的,也不能忽视。 最后,实训结束后,我还意识到系统的持续改进和维护是必要的。随着业务...
Mysql根据时间查询日期的优化技巧
如果该
字段
已
建立
索引
,这将大大提高查询速度。 为了进一步优化日期处理,我们可以使用变量来存储日期范围,避免每次查询时重复计算。如下所示: ```sql DECLARE yt VARCHAR(10); -- 昨天日期 DECLARE yt_bt ...
一个
Web报
表
项目的性能分析和优化实践(四):MySQL
建立
索引
,唯一
索引
和组合
索引
...
数据库B、C、D:
一个
项目对应
一个
数据库,而且这几个项目的
表
是完全一样的。 数据库
表
的特点 A中的
表
:数据量几乎都比较小,比如User
表
中用户数,顶多也就几百上千。 B中的
表
:X/Y/Z 3张
表
几乎是确定的,...
Oracle数据库创建
索引
后,
索引
不起作用的原因。
需要
建立
函数
索引
. 8,not in ,not exist. 9,当变量采用的是times变量,而
表
的
字段
采用的是date变量时.或相反情况。 10,
索引
失效。 11,基于cost成本分析(oracle因为走全
表
成本会更小):查询小
表
,或者返回值大概在10
oracle
索引
失效原因及解决方法
一、以下的方法会引起
索引
失效 1,<> 2,单独的>,&...,(有时会用到,有时不会) ...需要
建立
函数
索引
. 8,not in ,not exist. 9,当变量采用的是times变量,而
表
的
字段
采用的是...
MS-SQL Server
34,875
社区成员
254,640
社区内容
发帖
与我相关
我的任务
MS-SQL Server
MS-SQL Server相关内容讨论专区
复制链接
扫一扫
分享
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章