sqlserver,表已添加索引,是否仍会随着数据量不断不断增大而查询越来越慢?

视图vwtable为(select*fromtable1unionallselect*fromtable2unionall……unionallselect*fromtab... 视图vwtable为
(select * from table1 union all select * from table2 union all……union all select * from table100),视图没有索引,表有索引。
请比较
select column1 from table1 where index_column='XXX'和
select column1 from vwtable where index_column='XXX',
哪个快?
一个表大约700万条记录
展开
 我来答
紫仑天玑
2014-12-27 · 萝卜数学关注思维过程
紫仑天玑
采纳数:324 获赞数:888

向TA提问 私信TA
展开全部

无论哪一种数据库,只要数据量不断增大都会逐渐变慢,有时候数据到一个量级

速度会断壁式下跌。

一般是直接从表查询快。已经是索引列了。但是第一个查询如果数据不存在还是要遍历其他的表。这样速度就大打折扣了。

如果能保证数据一定在指定表中就是第一个快了。

大体分为如下几种情况会逆袭:

1、这个就是数据不存在,如果挨个遍历表,速度可能不如使用视图。

2、使用索引视图技术,这个跟使用表查询速度相差不大。

3、sqlserver是高级版本,可以发挥多CPU优势,这个时候速度也相差不大。

4、索引碎片过多集中在的某三四个表以上,这时候性能都比较沮丧。


看如上,因为我这个是32核CPU,多并行几个时间只是略多一点,如果单表查询,那么执行计划就是一个分支。

更多追问追答
追问
第一个查询select table1已确认数据在该表(事实之前已快速定位到该表);
第二个查询中就是普通视图。

在平均一个表700万记录的情况下,两者的查询速度会相差非常大吗?
查询这个视图会先把union all的100张表全部执行完联合再从结果集中查询记录吗?
查询这个视图会使用到表的索引吗?
追答

查询这个视图会使用到表的索引吗?

视图你可以理解为还是一个查询,如果字段HIT中索引,那么会用到索引。

在平均一个表700万记录的情况下,两者的查询速度会相差非常大吗?

如果使用到索引,速度相差不会很大,一般会比直接定位表高出几秒。多出的时间就是索引页遍历时间。

查询这个视图会先把union all的100张表全部执行完联合再从结果集中查询记录吗?

用到索引是不会的,因为先加载索引页,然后根据索引页指向到数据页,然后从数据页中抽出数据。

过程如下:

使用使用了100个表,也就多花销了遍历索引页的时间。

如果索引页得到定位,那么索引页就会指向对应的数据页,发生一次聚集索引扫描。

抽出对应的数据。

因为索引页比较小,一本中华大字典,查偏旁的目录页也不过十几页。遍历这几页时间不算多。

向你说的组合100个表构成一个视图,我觉得这个SQL报文就很大了。

SQL进入预编译,生成查询计划都是要耗费一定时间的。当然这个相对数据输出可以忽略。


出现这种情况应该早用分区方案了。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式