欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

SQLServer2012和MariaDB 10.0.3分页效率的对比

程序员文章站 2023-11-16 08:08:46
sqlserver2012和mariadb 10.0.3分页效率的对比   1. 实验环境        r910服务器,...

sqlserver2012和mariadb 10.0.3分页效率的对比

 

1. 实验环境

 

     r910服务器, 16g内存

 

     sqlserver 2012   64bit

     mariadb 10.0.3   64bit  (innodb)

 

2. 实验表情况

 

SQLServer2012和MariaDB 10.0.3分页效率的对比

 

rtlbill.billno 为主键, rtlbill.billdate 上有索引;

 

rtldetail.billno 上有索引;

 

3. 实验步骤

 

(1)重启sqlserver2012

 

(2)执行下面的分页语句

 

select billdate, sum([qty]) posinqty
from rtldetail a,rtlbill b 
where a.billno = b.billno  and billdate>='2009-09-25 00:00:00' and billdate<='2012-09-25 23:59:59'
group by billdate 
order by billdate
offset 10row fetch next20rows only;

 

 

(3)重启mariadb

 

(4)执行下面的分页语句

 

select billdate, sum(qty) as posinqty
from rtldetail a,rtlbill b 
where a.billno = b.billno  and billdate>='2009-09-25 00:00:00' and billdate<='2012-09-25 23:59:59'
group by billdate 
order by billdate
limit 10,20;

 

 

 

4. 实验结果

 

同样是获取第 11 ~ 30 条记录

server2012耗时:18s

 

mariadb耗时:       2s

 

 

这个差别还是挺震撼的,是什么导致了二者的巨大差距?

 

下面来看看执行前后二者的io对比。

 

 

5. 分析

 

(1)从下图中可以看出,为了获取分页数据,mariadb读取了 52m 数据

 

SQLServer2012和MariaDB 10.0.3分页效率的对比

 

(2)为了获取相同的数据,sqlserver2012,读取了 848m 数据

 

SQLServer2012和MariaDB 10.0.3分页效率的对比

 

(3)二者的差距,就在分页数据的读取策略上。sqlerver2012为了读取分页子集,几乎把整个表都放入了内存。不得不说,这块儿优化的空间很大。。。