日期:2014-05-16  浏览次数:20507 次

这两条sql语句有什么区别,那条sql比较好,为什么?
CREATE CLUSTERED INDEX [idx_groupid] ON [dbo].[auth] 
(
[group_id] ASC
)WITH (DROP_EXISTING=on)
ON [PRIMARY]

alter index [idx_groupid]  on [dbo].[auth]  rebuild 

这两条sql语句有什么区别,那条sql比较好,为什么?
------解决方案--------------------
本帖最后由 DBA_Huangzj 于 2014-04-03 15:28:22 编辑
有,一个是创建,一个是重建,也就是已经有了,重新建而已,如果之前不存在,需要用第一个,这个没什么可比性
------解决方案--------------------
两者都没可比性。
------解决方案--------------------
看到你的DROP_EXISTING=on了,这个可以用于重建,而且是首选项,ALTER那个是旧写法,会造成一定的锁问题,建议使用第一种
------解决方案--------------------
引用:
非聚集索引依赖于聚集索引,所以用两种方法修改索引,如果都修改的是聚集索引,哪个对非聚集索引的影响小

修改聚集索引的话,哪一个对非聚集索引的影响都不会小,聚集索引建议建好之后尽量不要动,特别是表数据量很大的情况。
其实你的语句仅仅是建/更改索引,具体哪一个好,还真不好说,感觉你习惯哪个就用哪个吧。实在不行就问问微软。
------解决方案--------------------
引用:
非聚集索引依赖于聚集索引,所以用两种方法修改索引,如果都修改的是聚集索引,哪个对非聚集索引的影响小

第一种方法小
------解决方案--------------------
引用:
但聚集索引只能建一个吧,如果你原来都已经建立了聚集索引,那现在再创建,肯定建不起来
可以的,不过貌似不能动建表时由PK产生的聚集索引


CREATE TABLE test (id INT ,NAME varchar)
CREATE CLUSTERED INDEX Clu_Test ON test(id)
INSERT INTO test(id,name)
VALUES(1,'a'),(2,'b')


CREATE CLUSTERED INDEX Clu_Test ON test(id)WITH (DROP_EXISTING=on)