永发信息网

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

答案:1  悬赏:30  手机版
解决时间 2021-04-06 15:57
  • 提问者网友:暮烟疏雨之际
  • 2021-04-06 04:22
sqlserver,表已添加索引,是否仍会随着数据量不断不断增大而查询越来越慢?
最佳答案
  • 五星知识达人网友:轻雾山林
  • 2021-04-06 04:29
无论哪一种数据库,只要数据量不断增大都会逐渐变慢,有时候数据到一个量级
速度会断壁式下跌。
一般是直接从表查询快。已经是索引列了。但是第一个查询如果数据不存在还是要遍历其他的表。这样速度就大打折扣了。
如果能保证数据一定在指定表中就是第一个快了。
大体分为如下几种情况会逆袭:
1、这个就是数据不存在,如果挨个遍历表,速度可能不如使用视图。
2、使用索引视图技术,这个跟使用表查询速度相差不大。
3、sqlserver是高级版本,可以发挥多CPU优势,这个时候速度也相差不大。
4、索引碎片过多集中在的某三四个表以上,这时候性能都比较沮丧。



看如上,因为我这个是32核CPU,多并行几个时间只是略多一点,如果单表查询,那么执行计划就是一个分支。
追问第一个查询select table1已确认数据在该表(事实之前已快速定位到该表);
第二个查询中就是普通视图。

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

视图你可以理解为还是一个查询,如果字段HIT中索引,那么会用到索引。
在平均一个表700万记录的情况下,两者的查询速度会相差非常大吗?

如果使用到索引,速度相差不会很大,一般会比直接定位表高出几秒。多出的时间就是索引页遍历时间。
查询这个视图会先把union all的100张表全部执行完联合再从结果集中查询记录吗?

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




使用使用了100个表,也就多花销了遍历索引页的时间。
如果索引页得到定位,那么索引页就会指向对应的数据页,发生一次聚集索引扫描。
抽出对应的数据。
因为索引页比较小,一本中华大字典,查偏旁的目录页也不过十几页。遍历这几页时间不算多。
向你说的组合100个表构成一个视图,我觉得这个SQL报文就很大了。
SQL进入预编译,生成查询计划都是要耗费一定时间的。当然这个相对数据输出可以忽略。


出现这种情况应该早用分区方案了。
追问您好,已知该索引字段长度较长,20个数字,并且如果是并发查询,会不会存在并发越大两种查询的耗时差距越大(定位到单个表查询和直接查该视图)?

多谢不吝赐教。追答索引字段长度小,一个页就可以多放几个行集,提高加载效率。
并发越多耗时差距越大,这个没错。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯