数据库的规模对select语句的效率影响有多大?

来源:互联网 发布:c语言实现类的定义 编辑:程序博客网 时间:2024/05/01 13:49

    今天跟同学为了一个问题争了好久,现在越来越能够享受争论的乐趣了,不会像以前一样带入太多的个人情绪,更能够客观的看待问题本身了。他的观点是当一个数据库规模不断增大时,查询同样条数的select语句查询的效率会越来越低,举个例子:一个数据库总共有1W数据时取一千数据跟数据库总用有1000W时取一午数据的查询时间会差别非常大,他认为会严重影响到用户体验,而我认为影响不会太大。为了确定到底谁的观点正确,我就又做了一次实验。实验在SQL 2005的STUDIO界面下进行,采用命令如下格式:

 

select getdate()

select * from tablename where ...

select getdate()

 

    首先将待查的那个表清空,然后慢慢增加数据,在每个数量级进行一次时间测试。

 

+----------------+----------------+----------------+

+  总数据量(W)   取1W耗时(s)     取全部耗时(s)

+----------------+----------------+----------------+

+       1                   0.341              0.34

+----------------+----------------+----------------+

+       10                 0.279            not test

+----------------+----------------+----------------+

+       36.5              0.407              5.17

+----------------+----------------+----------------+

+       49.7              0.406              10.25

+----------------+----------------+----------------+ 

 

    用完了两个月的数据,得到了上面的结果,至少说明了在50W数据量以下的数据库取相同数量的数据在效率方面并没有什么显著区别。实验中耗时不同主要是因为取的条件不一样。为了证明在更大数据量的情况下是否也一样,我又接着插入那些重复的数据(通过上次文章提到的方法,不验证数据重复性)。当数据总量达到96.6W时,随便选取了一个时间范围的条件取了1W数据,耗时0.452s,还是挺快的,而取全部数据则线性增长到了19.83s。为了验证是否在1000W条的时候也一样,我接着插入数据。但是花了几个小时才插到300W多一点,实在是懒得再插了,就在这个点采了一下数据,其中取1W数据分别用两种方式,一种是取自增键nindex的最后1W条数据,另一种是掐一段时间得1W条数据,分别的耗时是0.31s和0.797,取其平均值勉强得到下表:

 

+----------------+----------------+----------------+

+  总数据量(W)   取1W耗时(s)     取全部耗时(s)

+----------------+----------------+----------------+

+       1                   0.341              0.34

+----------------+----------------+----------------+

+       10                 0.279            not test

+----------------+----------------+----------------+

+       36.5              0.407              5.17

+----------------+----------------+----------------+

+       49.7              0.406              10.25

+----------------+----------------+----------------+ 

+       96.6              0.452              19.83

+----------------+----------------+----------------+

+       308               0.504               64

+----------------+----------------+----------------+ 

 

    感觉照这么下去,取1W的耗时也不会长到哪去,由此实验做为依据可以推导出:select语句的执行时间只跟取出的数据量成正比,与数据库的数据总量没有关系,然后要注意的就是,不同的条件取相同的数量也会得到不同的执行时间,具体原因不得而知。