在已建立分区表的数据表上 建全文索引的问题

时间:2021-04-08 04:43:12
各位大神好 小弟在这里请教了问题!

现在情况是数据表记录在1亿左右,已建立分区方案,根据添加时间addTime作为分区条件,但由于addTime的数据不是唯一,所以聚集索引设为addTime和Id的组合索引,目前这块没什么问题。现在需要在Name字段和正文字段 Content建立全文索引,毕竟这些字段需要模糊搜索,但是在建立全文索引时,所需要的唯一索引列不存在,因为唯一索引列必须是唯一的单列索引,而我之前因为分区而建立的唯一聚集索引是组合列,不能用,而现在再想建立一个ID的唯一非聚集索引也不行,系统提示必须是分区条件addTime的子集!!!!我快疯掉了 请各位大神支招!!!

10 个解决方案

#1


这个没办法解决了。要么就合并之后再加索引列。
话说,1亿数据也没有必要分区吧?
我几千万join几百万join几个几十万的表,也没出现什么问题啊。

#2


引用 1楼shoppo0505 的回复:
这个没办法解决了。要么就合并之后再加索引列。
话说,1亿数据也没有必要分区吧?
我几千万join几百万join几个几十万的表,也没出现什么问题啊。
1亿事不多 但是要为以后打算啊 等多了再分区 不如提早分区了啊 合并不就是普通表了 那更不行了

#3


引用 2 楼 sd4424 的回复:
Quote: 引用 1楼shoppo0505 的回复:
这个没办法解决了。要么就合并之后再加索引列。
话说,1亿数据也没有必要分区吧?
我几千万join几百万join几个几十万的表,也没出现什么问题啊。
1亿事不多 但是要为以后打算啊 等多了再分区 不如提早分区了啊 合并不就是普通表了 那更不行了

你的数据库是什么版本的

#4


引用 3 楼 z10843087 的回复:
Quote: 引用 2 楼 sd4424 的回复:

Quote: 引用 1楼shoppo0505 的回复:
这个没办法解决了。要么就合并之后再加索引列。
话说,1亿数据也没有必要分区吧?
我几千万join几百万join几个几十万的表,也没出现什么问题啊。
1亿事不多 但是要为以后打算啊 等多了再分区 不如提早分区了啊 合并不就是普通表了 那更不行了

你的数据库是什么版本的

SQL SERVER 2012

#5


引用 楼主 sd4424 的回复:
各位大神好 小弟在这里请教了问题!

现在情况是数据表记录在1亿左右,已建立分区方案,根据添加时间addTime作为分区条件,但由于addTime的数据不是唯一,所以聚集索引设为addTime和Id的组合索引,目前这块没什么问题。现在需要在Name字段和正文字段 Content建立全文索引,毕竟这些字段需要模糊搜索,但是在建立全文索引时,所需要的唯一索引列不存在,因为唯一索引列必须是唯一的单列索引,而我之前因为分区而建立的唯一聚集索引是组合列,不能用,而现在再想建立一个ID的唯一非聚集索引也不行,系统提示必须是分区条件addTime的子集!!!!我快疯掉了 请各位大神支招!!!

有一个办法 你可以参考。新建一个表,先建上ID列的唯一非聚集索引。然后再把表变成分区。聚集索引就用 addtime。你的addTime和Id的组合索引好像没什么用啊.

#6


引用 5楼OwenZeng_DBA 的回复:
Quote: 引用 楼主 sd4424 的回复:

各位大神好 小弟在这里请教了问题!

现在情况是数据表记录在1亿左右,已建立分区方案,根据添加时间addTime作为分区条件,但由于addTime的数据不是唯一,所以聚集索引设为addTime和Id的组合索引,目前这块没什么问题。现在需要在Name字段和正文字段 Content建立全文索引,毕竟这些字段需要模糊搜索,但是在建立全文索引时,所需要的唯一索引列不存在,因为唯一索引列必须是唯一的单列索引,而我之前因为分区而建立的唯一聚集索引是组合列,不能用,而现在再想建立一个ID的唯一非聚集索引也不行,系统提示必须是分区条件addTime的子集!!!!我快疯掉了 请各位大神支招!!!

有一个办法 你可以参考。新建一个表,先建上ID列的唯一非聚集索引。然后再把表变成分区。聚集索引就用 addtime。你的addTime和Id的组合索引好像没什么用啊.
addTime 和Id的组合索引主要目的是这样就是唯一的聚集索引了 那查询速度可以提高很多 
如果只用addTime做为聚集索引 因为他不是唯一的 所以速度会差很多
你的先设置Id为唯一非聚集索引 再设置addTime做为非唯一聚集索引 再分区的方法 可以解决全文索引没有唯一索引单列的问题 但是这样的话 这个Id索引就是建立在Primary文件组上的了 而非建立在分区方案上了

#7


@sd4424
如果addTime  重复数据不多,速度不会有很大的差异。Id索引缺失建立在Primary文件组上的了 而非建立在分区方案上。
不过目前看来没有其他合适的方法。。或者你用ID来做分区?当时为什么选addtime来分区呢。

#8


引用 7楼OwenZeng_DBA 的回复:
@sd4424
如果addTime  重复数据不多,速度不会有很大的差异。Id索引缺失建立在Primary文件组上的了 而非建立在分区方案上。
不过目前看来没有其他合适的方法。。或者你用ID来做分区?当时为什么选addtime来分区呢。
本来想以时间为依据列 每年分一个区 
我现在的解决方案如你所说 就是以Id为依据列 一千万分一个分区 这样的确可以解决全文索引唯一单列的索引的问题 而且唯一聚集索引速度也不错 谢啦 兄弟 以后有机会多讨论

#9


引用 8 楼 sd4424 的回复:
Quote: 引用 7楼OwenZeng_DBA 的回复:
@sd4424
如果addTime  重复数据不多,速度不会有很大的差异。Id索引缺失建立在Primary文件组上的了 而非建立在分区方案上。
不过目前看来没有其他合适的方法。。或者你用ID来做分区?当时为什么选addtime来分区呢。
本来想以时间为依据列 每年分一个区 
我现在的解决方案如你所说 就是以Id为依据列 一千万分一个分区 这样的确可以解决全文索引唯一单列的索引的问题 而且唯一聚集索引速度也不错 谢啦 兄弟 以后有机会多讨论

客气了,,互相学习。

#10


引用 9楼OwenZeng_DBA 的回复:
Quote: 引用 8 楼 sd4424 的回复:

Quote: 引用 7楼OwenZeng_DBA 的回复:
@sd4424
如果addTime  重复数据不多,速度不会有很大的差异。Id索引缺失建立在Primary文件组上的了 而非建立在分区方案上。
不过目前看来没有其他合适的方法。。或者你用ID来做分区?当时为什么选addtime来分区呢。
本来想以时间为依据列 每年分一个区 
我现在的解决方案如你所说 就是以Id为依据列 一千万分一个分区 这样的确可以解决全文索引唯一单列的索引的问题 而且唯一聚集索引速度也不错 谢啦 兄弟 以后有机会多讨论

客气了,,互相学习。
话说手机客户端不能结帖?

#1


这个没办法解决了。要么就合并之后再加索引列。
话说,1亿数据也没有必要分区吧?
我几千万join几百万join几个几十万的表,也没出现什么问题啊。

#2


引用 1楼shoppo0505 的回复:
这个没办法解决了。要么就合并之后再加索引列。
话说,1亿数据也没有必要分区吧?
我几千万join几百万join几个几十万的表,也没出现什么问题啊。
1亿事不多 但是要为以后打算啊 等多了再分区 不如提早分区了啊 合并不就是普通表了 那更不行了

#3


引用 2 楼 sd4424 的回复:
Quote: 引用 1楼shoppo0505 的回复:
这个没办法解决了。要么就合并之后再加索引列。
话说,1亿数据也没有必要分区吧?
我几千万join几百万join几个几十万的表,也没出现什么问题啊。
1亿事不多 但是要为以后打算啊 等多了再分区 不如提早分区了啊 合并不就是普通表了 那更不行了

你的数据库是什么版本的

#4


引用 3 楼 z10843087 的回复:
Quote: 引用 2 楼 sd4424 的回复:

Quote: 引用 1楼shoppo0505 的回复:
这个没办法解决了。要么就合并之后再加索引列。
话说,1亿数据也没有必要分区吧?
我几千万join几百万join几个几十万的表,也没出现什么问题啊。
1亿事不多 但是要为以后打算啊 等多了再分区 不如提早分区了啊 合并不就是普通表了 那更不行了

你的数据库是什么版本的

SQL SERVER 2012

#5


引用 楼主 sd4424 的回复:
各位大神好 小弟在这里请教了问题!

现在情况是数据表记录在1亿左右,已建立分区方案,根据添加时间addTime作为分区条件,但由于addTime的数据不是唯一,所以聚集索引设为addTime和Id的组合索引,目前这块没什么问题。现在需要在Name字段和正文字段 Content建立全文索引,毕竟这些字段需要模糊搜索,但是在建立全文索引时,所需要的唯一索引列不存在,因为唯一索引列必须是唯一的单列索引,而我之前因为分区而建立的唯一聚集索引是组合列,不能用,而现在再想建立一个ID的唯一非聚集索引也不行,系统提示必须是分区条件addTime的子集!!!!我快疯掉了 请各位大神支招!!!

有一个办法 你可以参考。新建一个表,先建上ID列的唯一非聚集索引。然后再把表变成分区。聚集索引就用 addtime。你的addTime和Id的组合索引好像没什么用啊.

#6


引用 5楼OwenZeng_DBA 的回复:
Quote: 引用 楼主 sd4424 的回复:

各位大神好 小弟在这里请教了问题!

现在情况是数据表记录在1亿左右,已建立分区方案,根据添加时间addTime作为分区条件,但由于addTime的数据不是唯一,所以聚集索引设为addTime和Id的组合索引,目前这块没什么问题。现在需要在Name字段和正文字段 Content建立全文索引,毕竟这些字段需要模糊搜索,但是在建立全文索引时,所需要的唯一索引列不存在,因为唯一索引列必须是唯一的单列索引,而我之前因为分区而建立的唯一聚集索引是组合列,不能用,而现在再想建立一个ID的唯一非聚集索引也不行,系统提示必须是分区条件addTime的子集!!!!我快疯掉了 请各位大神支招!!!

有一个办法 你可以参考。新建一个表,先建上ID列的唯一非聚集索引。然后再把表变成分区。聚集索引就用 addtime。你的addTime和Id的组合索引好像没什么用啊.
addTime 和Id的组合索引主要目的是这样就是唯一的聚集索引了 那查询速度可以提高很多 
如果只用addTime做为聚集索引 因为他不是唯一的 所以速度会差很多
你的先设置Id为唯一非聚集索引 再设置addTime做为非唯一聚集索引 再分区的方法 可以解决全文索引没有唯一索引单列的问题 但是这样的话 这个Id索引就是建立在Primary文件组上的了 而非建立在分区方案上了

#7


@sd4424
如果addTime  重复数据不多,速度不会有很大的差异。Id索引缺失建立在Primary文件组上的了 而非建立在分区方案上。
不过目前看来没有其他合适的方法。。或者你用ID来做分区?当时为什么选addtime来分区呢。

#8


引用 7楼OwenZeng_DBA 的回复:
@sd4424
如果addTime  重复数据不多,速度不会有很大的差异。Id索引缺失建立在Primary文件组上的了 而非建立在分区方案上。
不过目前看来没有其他合适的方法。。或者你用ID来做分区?当时为什么选addtime来分区呢。
本来想以时间为依据列 每年分一个区 
我现在的解决方案如你所说 就是以Id为依据列 一千万分一个分区 这样的确可以解决全文索引唯一单列的索引的问题 而且唯一聚集索引速度也不错 谢啦 兄弟 以后有机会多讨论

#9


引用 8 楼 sd4424 的回复:
Quote: 引用 7楼OwenZeng_DBA 的回复:
@sd4424
如果addTime  重复数据不多,速度不会有很大的差异。Id索引缺失建立在Primary文件组上的了 而非建立在分区方案上。
不过目前看来没有其他合适的方法。。或者你用ID来做分区?当时为什么选addtime来分区呢。
本来想以时间为依据列 每年分一个区 
我现在的解决方案如你所说 就是以Id为依据列 一千万分一个分区 这样的确可以解决全文索引唯一单列的索引的问题 而且唯一聚集索引速度也不错 谢啦 兄弟 以后有机会多讨论

客气了,,互相学习。

#10


引用 9楼OwenZeng_DBA 的回复:
Quote: 引用 8 楼 sd4424 的回复:

Quote: 引用 7楼OwenZeng_DBA 的回复:
@sd4424
如果addTime  重复数据不多,速度不会有很大的差异。Id索引缺失建立在Primary文件组上的了 而非建立在分区方案上。
不过目前看来没有其他合适的方法。。或者你用ID来做分区?当时为什么选addtime来分区呢。
本来想以时间为依据列 每年分一个区 
我现在的解决方案如你所说 就是以Id为依据列 一千万分一个分区 这样的确可以解决全文索引唯一单列的索引的问题 而且唯一聚集索引速度也不错 谢啦 兄弟 以后有机会多讨论

客气了,,互相学习。
话说手机客户端不能结帖?