社区
MS-SQL Server
帖子详情
关于非聚集索引的问题,有经验的都来看一下
qiashzhou
2007-12-04 10:03:05
我在8月份的时候对表A的字段B建了一个非聚集索引,结果这之前基于字段B的查询操作(分组求和)就快了很多。但是现在对8月份以后插入的数据进行相同的查询速度还是很慢,我把索引删了又重新建了一下,速度变快了。难道建的索引只对当前数据有效?有人能分析一下并指导一下该怎么做才好吗,总不能每次都删了索引再建。
...全文
157
15
打赏
收藏
关于非聚集索引的问题,有经验的都来看一下
我在8月份的时候对表A的字段B建了一个非聚集索引,结果这之前基于字段B的查询操作(分组求和)就快了很多。但是现在对8月份以后插入的数据进行相同的查询速度还是很慢,我把索引删了又重新建了一下,速度变快了。难道建的索引只对当前数据有效?有人能分析一下并指导一下该怎么做才好吗,总不能每次都删了索引再建。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
w2jc
2007-12-05
打赏
举报
回复
但是在数据量不大的情况下每个月都要维护倒是没想到。
-------------------------------------------
根据你的表结构和索引的不同情况,有时候数据量不大也会造成索引碎片,
懒(或者容易)一点的办法就是定期重建索引(不要自己手工删除),比如建一个维护计划定期运行,每2周,每周...
如果数据量太大,更新频繁,可参考5楼给的命令,用dbcc showcontig 来确定碎片很多的索引,
然后只对这个索引进行重建操作。
w2jc
2007-12-04
打赏
举报
回复
每条数据也就几十个字段
-------------------------
这种字段很多的表比较容易造成碎片。
LZ这种情况多半是索引有碎片,或者统计信息没有更新
DBCC DBREINDEX
( 'table_name' [ , 'index_name' [ , fillfactor ] ] )
在SQL 2000里面使用上面的命令去重建你的索引,看联机文档跟详细;
从SQL 2005开始 DBCC DBREINDEX 将被ALTER INDEX取代;
DBCC DBREINDEX 的另外一个好处是可以更新相关的统计信息。
rouqu
2007-12-04
打赏
举报
回复
大致原理
======
非聚集索引与聚集索引的一个本质区别 B*树底部没有数据页 默认索引填充因子0% 是极不饱和状态
你后来插入的数据会在B*树下继续填充现有或添加额外索引页 但不维护索引顺序和数据页针对索引列的物理排序 针对索引列的query会去按照算法搜索或遍历索引页 对于大表可想而知 性能会有提升
如果你的表总数据不到1W条 其实也没必要用索引了 直接扫描表说不定更快
qiashzhou
2007-12-04
打赏
举报
回复
说错了,8月份以后一共插入几千条数据
orochi_gao
2007-12-04
打赏
举报
回复
帮顶,关注学习!
qiashzhou
2007-12-04
打赏
举报
回复
MS SQL 2005里面怎么扫描索引碎片呢?
从8月份新建索引以来一共才插入800多条数据,而且每条数据也就几十个字段,基本没有删除更新操作,怎么就会出这种问题了呢?
ivyrich
2007-12-04
打赏
举报
回复
DBCC SHOWCONTIG 可确定表是否高度碎片化。在对表进行数据修改(INSERT、UPDATE 和 DELETE 语句)的过程中会出现表碎片现象。由于这些修改通常并不在表的行中平均分布,所以每页的填满状态会随时间而改变。
如果索引的碎片非常多,可选择以下方法来减少碎片:
删除然后重新创建聚集索引。
重新创建聚集索引将重新组织数据,从而使数据页填满。填满程度可以使用 CREATE INDEX 中的 FILLFACTOR 选项进行配置。这种方法的缺点是索引在删除/重新创建周期内为脱机状态,并且该操作是一个整体,不可中断。如果中断索引创建,则不能重新创建索引。
对索引的叶级页按逻辑顺序重新排序。
使用 ALTER INDEX…REORGANIZE,对索引的页级页按逻辑顺序重新排序。由于此操作是联机操作,因此语句运行时索引可用。此外,中断该操作不会丢失已完成的工作。这种方法的缺点是在重新组织数据方面没有聚集索引的删除/重新创建操作有效。
联机重新生成索引。
areswang
2007-12-04
打赏
举报
回复
依LZ意思看是索引不起作用了,再建之后又重新起作用。难道会有冲突。学习!
ivyrich
2007-12-04
打赏
举报
回复
建议扫描一下索引碎片
fa_ge
2007-12-04
打赏
举报
回复
对所有记录有效
hui_hui_2007
2007-12-04
打赏
举报
回复
应该不会的,索引都是引对所有记录的。
是不是有别的因素呀。
qiashzhou
2007-12-04
打赏
举报
回复
楼上的说我对索引不了解,这个确实是事实,我也是因为刚开始查询觉得速度比较慢,建了一个索引就快多了。
索引需要维护我倒也知道一点,但是在数据量不大的情况下每个月都要维护倒是没想到。
中国风
2007-12-04
打赏
举报
回复
索引的重建和整理:
http://topic.csdn.net/u/20070329/17/38398e78-adac-4d7e-a8b6-f2d319d283e8.html
wzy_love_sly
2007-12-04
打赏
举报
回复
学习,支持w2jc一下
hb_gx
2007-12-04
打赏
举报
回复
LZ 看来对索引不是很了解,索引不是建了以后就不用去管的,索引是需要经常去维护的,知道为什么维护计划里面会有重新组织和重新生成索引吗?删除重建就相当于是在重新生成索引
既然用Sql2005就看看这个动态管理函数 sys.dm_db_index_physical_stats 好了,或者是联机帮助上的 重新组织和重新生成索引 ,学习一下自己理解理解比较好
聚集索引和
非聚集索引
的区别
一、深入浅出理解索引结构 实际上,可以把索引理解为一种特殊的目录。微软的SQL SERVER提供了两种索引:聚集索引(clustered index,也称聚类索引、簇集索引)和
非聚集索引
(nonclustered index,也称非聚类索引、非簇集索引)。下面,我们举例来说明
一下
聚集索引和
非聚集索引
的区别: 其实,我们的汉语字典的正文本身就是一个聚集索引。比如,我们要查“安”字,因为“安”的拼音是...
聚集索引与
非聚集索引
聚集索引与
非聚集索引
的总结 一.索引简介 众所周知,索引是关系型数据库中给数据库表中一列或多列的值排序后的存储结构,SQL的主流索引结构有B+树以及Hash结构,聚集索引以及
非聚集索引
用的是B+树索引。这篇文章会总结SQL Server以及MySQL的InnoDB和MyISAM两种SQL的索引。 SQL Sever索引类型有:唯一索引,主键索引,聚集索引,
非聚集索引
。 MySQL 索引类型有:唯一索引,主键(聚集)索引,
非聚集索引
,全文索引。 二.聚集索引 聚集(clustered)索引,也叫
Sqlserver 高级篇
非聚集索引
原理
原理 最好看
一下
这些章节帮助理解 Sqlserver 高级篇 理解存储原理 (数据库页概念) Sqlserver 高级篇 数据存储(堆概念,索引)
非聚集索引
非聚集索引
是数据库按照 用户所设置的索引列 创建了多个排序好的索引页 每次查找 都遍历索引页 毕竟 遍历索引页 比直接遍历所有数据要快
非聚集索引
可以有多个 唯一索引 (我们设置好的唯一约束)也是
非聚集索引
只不过多了一...
聚集索引与
非聚集索引
的区别
一.索引简介 众所周知,索引是关系型数据库中给数据库表中一列或多列的值排序后的存储结构,SQL的主流索引结构有B+树以及Hash结构,聚集索引以及
非聚集索引
用的是B+树索引。 关于索引的分类,可以查看之前的文章:https://blog.csdn.net/vtopqx/article/details/105563332 这篇文章会总结SQL Server以及MySQL的InnoDB和MyISAM两种SQL的索引。 SQL Sever索引类型有:唯一索引,主键索引,聚集索引,
非聚集索引
。 MySQL
mysql聚集索引与
非聚集索引
mysql索引命中 一、索引类型 1、从物理存储角度上,索引可以分为聚集索引和
非聚集索引
。 聚集索引(Clustered Index),聚集索引决定数据在磁盘上的物理排序,一个表只能有一个聚集索引。
非聚集索引
(Non-clustered Index),
非聚集索引
并不决定数据在磁盘上的物理排序,索引上只包含被建立索引的数据,以及一个行定位符 row-locator,这个行定位符,可以理解为一个聚集索引物理排序的指针,通过这个指针,可以找到行数据。 2、从逻辑角度,索引可以分为以下几种 普.
MS-SQL Server
34,838
社区成员
254,632
社区内容
发帖
与我相关
我的任务
MS-SQL Server
MS-SQL Server相关内容讨论专区
复制链接
扫一扫
分享
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章