好贷网好贷款

为什么我作的表分区后,查询速度总是不如未分区的表 100zxk841019]

发布时间:2016-12-4 7:50:32 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"为什么我作的表分区后,查询速度总是不如未分区的表 100zxk841019]",主要涉及到为什么我作的表分区后,查询速度总是不如未分区的表 100zxk841019]方面的内容,对于为什么我作的表分区后,查询速度总是不如未分区的表 100zxk841019]感兴趣的同学可以参考一下。

    我测试过好多次,使用相同的表结构,数量,查询语句,索引等,就是只有一个区别,一个有分区,一个未分区,但从执行计划和运行时间看,总是未分区的会更快点,现在都搞不清,到底该不该分区,我的测试数据量是4000多万,而且我在磁盘阵列上也试了,把分区放在不同的磁盘上,结果还是一样。请高手指点一下,谢谢!

索引也放到分区

1.你根据什么键值来做分区的 2.你的查询语句会用到分区键值该字段吗?

别放到一个硬盘上。

别放到一个硬盘上。 ======================= 现在服务器都做阵列的好伐,所以这个问题应该是不存在的。

你的分区依据 你的索引

索引分区,具体看一下你的索引了。

引用 5 楼 fredrickhu 的回复:你的分区依据 你的索引 分区依据列 ?  索引如何处理的?

该回复于2011-04-21 11:01:20被版主删除

索引分区

   IO CPU  扫描计数 物理读取 CPU 时间 占用时间  没有包括分区字段的  普通表 1 次 47 次 298 毫秒 28 毫秒  分区表 1 次 47 次 359 毫秒 32 毫秒  有分区字段的ORDERBY  普通表 17 次 9538 次 874 毫秒 69 毫秒  分区表 17 次 8964 次 812 毫秒 83 毫秒  有分区字段的函数查询  普通表 2 次 1012 次 31 毫秒 27 毫秒  分区表 1 次 863 次 16 毫秒 23 毫秒  有分区字段的范围查询  普通表 1 次 178798 次 499 毫秒 2628 毫秒  分区表 1 次 103866 次 499 毫秒 556 毫秒  针对分区字段的查询  普通表 1 次 4570 次 297 毫秒 296 毫秒  分区表 17 次 4375 次 499 毫秒 56 毫秒  刚好前段时间做了一系列的表分区的效率测试,可以参考一下。。 不是什么时候表分区都能提高效率的

建议看执行计划,也可能跟CPU性能有关, 因为会并行读取多个磁盘阵列上的多个数据文件, 若CPU线程数不够分配,那也只能一个一个去读了.

分区字段与查询字段的关系呢? 另外查询字段是否确定走索引?

跟硬件有关系 --reply by CSDN Study V1.0.0.3 (starts_2000)

我估计是 你以字段 A建立的分区,但是查询的时候 你的查询条件是B,所以建立分区根本没有起到应该有的作用

重建几个索引

我的表有1.5亿条,按月分了24个区,建索引的时候在分区架构下,在同一个磁盘阵列里。做查询比没分的时候慢了挺多的,不知道为什么

如果 分区是放在一个阵列里面也是没意义的

我觉得可能会意义不大,但是应该没用不应该速度变慢了。我在分区架构下建立了一个主键和一个非聚集索引,不知道有什么影响吗。

引用 18 楼 wycusl 的回复:我觉得可能会意义不大,但是应该没用不应该速度变慢了。我在分区架构下建立了一个主键和一个非聚集索引,不知道有什么影响吗。必须做一下测试

分区索引,一定要在你的查询里用起到,并且要是主要的Seek条件,这样才能快速定位到分区。如果你的查询没有用到分区索引,而是其它的条件来查询,那样比分了还要慢些。大数据量还是要分别放到不同的物理磁盘上。这是我的体验。

...

关键看分区条件,如果你没有用到分区条件来查询的话,那分区就起不到作用了

建议楼主看一下这个东东:http://www.cnblogs.com/gaizai/archive/2011/07/01/2095539.html

我也在接触分区的技术。但是搞不懂啊。

我也遇到过此类问题, 总结经验是: 1、分区的字段必须是合理的,一般是按月分区 2、分区的文件应该放在不同的磁盘上 3、索引要合理

引用 18 楼 wycusl 的回复:我觉得可能会意义不大,但是应该没用不应该速度变慢了。我在分区架构下建立了一个主键和一个非聚集索引,不知道有什么影响吗。 把主键改称非聚集的(默认是聚集的),分区键上的索引也是建立成非聚集的,你可以发现比普通表快很多,我最近也在测试分区表,目前测试下来就是这种情况。

引用 17 楼 fanzhouqi 的回复:如果 分区是放在一个阵列里面也是没意义的 分磁盘的作用就是提高I/O,阵列的I/O效率比单磁盘高的多,怎么可能没有意义。

这个方面我研究好几年,还是根据需要进行,这个问题比较复杂,为什么要用分区索引?建立分区索引你是怎样考虑的,想提升那方面的问题? 把你表字段说一下,数据是怎样存放的,按照什么维度建立分区; 查询SQL 是咋样的等; 要不然,大家也不好提供好的建议,不能及时解决你的问题;

1.数据量的问题,数据量小的话两者就不是很明显 2.如果是获取整个表的内容的话,也就是所有分区的信息都要查的话,这个取决你的查询,如果你是个联合查询,先获取所有表的信息,然后联合,还是直接写表明,让查询自动去磁盘上个个分区去取数据。 3.另外查询是看你有没有使用分区关键字,和建立索引。

感谢大家的关注,我说明一下我的理解: 1.我的条件:... on l.phone = u.phone and l.MsgID = n.MsgID,分区按phone的前7位进行,分区索引:IX_Phone$MsgID 2.这张待分区的表,是用于存放用户服务日志的,每次匹配都要先统计该用户所有使用过的数据,所以我当时是觉得分区不能按时间来分,假如我按时间建立了10个分区,这样查询一个用户的所有记录,就必须扫描10个区才能得到我的数据,而未分区的话,只需查询1个区即可得到,所以IO方面,未分区的效果应该会更好些,所以我是按用户号码来分区的(按前7位),分了好多个区,好像有几百个,现在觉得好像分得太细了.....呵呵 3.刚才只是说一个用户的情况,而我的一次查询是批量的,不仅一个用户,最多的时候会有几十万的用户,而且号码分布不均匀,所以按整体来看,假如我是分了500个区,那我的这个查询就必须扫描500个区,所以IO方面肯定比未分区的情况来得多得多,虽然查询单个用户是快了,但批量的时候就不见得了 4.如果只是查询一个用户,那肯定速度会比未分区的情况来得快,因为它只在一个小分区里就能查询到想要的数据,未分区则要在所有数据中查询 以上是我的个人理解,分区对我的应用来说,用处不大,谢谢!

上一篇:Sql Server2012 安装失败!求解释。 40xiang520jl]
下一篇:mysql表拆分 40分,无满意结帖,结帖人programs_net]

相关文章

相关评论