存储方式对空间使用的影响和性能分析 本帖最后由 TravyLee 于 2012-11-12 09:11:11 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不同版本的sql server会不会在内部处理实现上会有所不同? 我做这个测试是在SQL SERVER2008 sp2上做的 参考的书籍上面是在SQL SERVER2005上做的 2000的不知道了 1、这个文章的标题确切的说是各种索引的使用个,而不是存储结构的使用。存储结构侧重的是表的结构的设计,例如说某个字段的数据类型和长度,他们在数据库中的存储。建议看下存储引擎。2、在测试的时候,每次应该清掉缓存,然后测试。不知楼主是否清理,文章没有说明。3、--SQL Server这种堆和树的存储方式决定了创建非聚集索引这种设计是一个既浪费空--间,性能也不一定是最好的。前面的分析已经说明了它的浪费存储空间,接下来以--一个最直观的查询来分析它的性能说说楼主的观点:不同意 非聚集索引时浪费存储空间的说法。毕竟一个表上只能建立一个聚集索引,但是查询的条件可能很多,这样的话就需要在经常查询的列上来建立索引。如果在同一列上建立聚集索引和非聚集索引,然后在该列上查询,那么效率上 聚集索引有它得天独厚的优势,因为聚集索引的是包含在数据页上的,而非聚集索引时限在索引页上进行查找,然后找到相应数据航所在的位置,然后再到数据页上找数据,所以在mssql的查询有时建立索引,在某些查询时也可能不使用该索引。个人认为楼主的测试没有代表性。应该在一个没有建立索引的和建立了非聚集索引的表上来测试非聚集索引的作用。 SQL Server这种堆和树的存储方式决定了创建非聚集索引这种设计是一个既浪费空--间,性能也不一定是最好的。--》》似乎将非聚集索引批的一文不值。聚集索引性能上却是不一定最好,在有时查询的时候也可能不会用到建立的索引,但是建立非聚集索引时用最小代价来换取最大的利益的。我建议看看技术内幕的存储引擎一本 ,上面有一张专门说的索引。相信对你会有所帮助 hen you a fa f a jfaljf 这不是徐海蔚的《sqlserver企业级平台管理实践》这本书上的内容么? dbcc showcontig 被标记为已过时应该用sys.dm_db_index_physical_stats去替代dbcc showcontig SELECT * FROM sys.dm_db_index_physical_stats(DB_ID(''),OBJECT_ID(''),NULL,NULL,'detailed') 该表数据有800多W条 为何dbcc showcontig显示如下信息?求解dbcc showcontig(omaster)DBCC SHOWCONTIG 正在扫描 'omaster' 表...表: 'omaster' (914102297);索引 ID: 0,数据库 ID: 7已执行 TABLE 级别的扫描。- 扫描页数................................: 0- 扫描区数..............................: 0- 区切换次数..............................: 0- 每个区的平均页数........................: 0.0- 扫描密度 [最佳计数:实际计数].......: 100.00% [0:0]- 区扫描碎片 ..................: 0.00%- 每页的平均可用字节数.....................: 0.0- 平均页密度(满).....................: 0.00%DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。 hjywyj 请进,帮我看一下 SSIS 防止导入相同的数据(30分) sql server 2005 的数据库 能转移到2000 上 用吗? 如何动态处理科目分层?详见内容 求二个sql语句,谢谢! 求教各位SQL高手,两个table里取值的问题 SQL 2005维护计划向导打不开 ?? select 列a+列b as a,两个列合并成一个,怎么写? 这句哪里错了? nononono(null,null):VFP报表中,设置数据分组以后,怎么按照分组表达式求计算字段?把结果放到组标头 sql:batchcompleted 怎么造成的? 求一左右相连的SQL?
我做这个测试是在SQL SERVER2008 sp2上做的 参考的书籍上面是在SQL SERVER2005上做的 2000的不知道了
2、在测试的时候,每次应该清掉缓存,然后测试。不知楼主是否清理,文章没有说明。
3、
--SQL Server这种堆和树的存储方式决定了创建非聚集索引这种设计是一个既浪费空
--间,性能也不一定是最好的。前面的分析已经说明了它的浪费存储空间,接下来以
--一个最直观的查询来分析它的性能
说说楼主的观点:不同意 非聚集索引时浪费存储空间的说法。毕竟一个表上只能建立一个聚集索引,但是查询的条件可能很多,这样的话就需要在经常查询的列上来建立索引。如果在同一列上建立聚集索引和非聚集索引,然后在该列上查询,那么效率上 聚集索引有它得天独厚的优势,因为聚集索引的是包含在数据页上的,而非聚集索引时限在索引页上进行查找,然后找到相应数据航所在的位置,然后再到数据页上找数据,所以在mssql的查询有时建立索引,在某些查询时也可能不使用该索引。个人认为楼主的测试没有代表性。应该在一个没有建立索引的和建立了非聚集索引的表上来测试非聚集索引的作用。
--间,性能也不一定是最好的。--》》似乎将非聚集索引批的一文不值。聚集索引性能上却是不一定最好,在有时查询的时候也可能不会用到建立的索引,但是建立非聚集索引时用最小代价来换取最大的利益的。
我建议看看技术内幕的存储引擎一本 ,上面有一张专门说的索引。相信对你会有所帮助
应该用sys.dm_db_index_physical_stats去替代dbcc showcontig
SELECT * FROM sys.dm_db_index_physical_stats(DB_ID(''),OBJECT_ID(''),NULL,NULL,'detailed')
该表数据有800多W条 为何dbcc showcontig显示如下信息?求解dbcc showcontig(omaster)DBCC SHOWCONTIG 正在扫描 'omaster' 表...
表: 'omaster' (914102297);索引 ID: 0,数据库 ID: 7
已执行 TABLE 级别的扫描。
- 扫描页数................................: 0
- 扫描区数..............................: 0
- 区切换次数..............................: 0
- 每个区的平均页数........................: 0.0
- 扫描密度 [最佳计数:实际计数].......: 100.00% [0:0]
- 区扫描碎片 ..................: 0.00%
- 每页的平均可用字节数.....................: 0.0
- 平均页密度(满).....................: 0.00%
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。