加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

MySQL亿级数据数据库优化方案测试-银行买卖营业流水记录的查询

发布时间:2019-06-06 11:18:08 所属栏目:编程 来源:逸宸a
导读:对MySQL的机能和亿级数据的处理赏罚要领思索,以及分库分表到底该怎样做,在什么场景较量吻合? 好比银行买卖营业流水记录的查询 限盐少许,上现实尝试进程,以下是在尝试的进程中做一些操纵,以及踩过的一些坑,我认为坑对付读者来讲长短常有效的。 起首:成立一

资金流水一样平常会凭证时刻举办查询,看看这速率到底奈何。

  1. select * from yun_cashflow  where createtime between '2018-10-23 09:06:58' and '2018-10-23 09:06:59'  

我去,脑补一下,当你拿这付出宝查汗青资金明细的时辰,56条信息,103.489秒,也就是快要2分钟的查询速率,你会是奈何的体验。哦 哦,差池,这个还没加用前提,那下面单独试试某个用户不限时刻范畴的前提是奈何的。

  1. select count(*) from yun_cashflow where userid=21 

也是快要1分半的速率,那在试试金额的前提。

  1. select count(*) from yun_cashflow where money<62 and userid=32 

同样都是快要一分半的时刻。

那把两个前提做下级联,看看结果会是奈何。

一样,也是快要1分半的时刻。

小总结一:在不加索引的环境下,无论单独,照旧连系前提查询,功效都是1分多钟不到2分钟。

好吧,那就加上索引试试,看看到底会有啥样事迹产生。

给用户加索引

  1. ALTER TABLE yun_cashflow ADD INDEX index_userid (userid) `

给金额加索引

  1. ALTER TABLE yun_cashflow ADD INDEX index_money (money) 

给时刻加索引

  1. ALTER TABLE yun_cashflow ADD INDEX index_createtime (createtime) 

小总结二: 成立索引的时刻均匀在1400秒阁下,或许在23分钟阁下。

索引都成立完了,在开始早年的前提查询,看看结果。

1、时刻范畴查询

  1. select * from yun_cashflow  where createtime between '2018-10-23 09:06:58' and '2018-10-23 09:06:59' 

2、用户查询与钱的连系查询

3、用户查询与钱与时刻三个前提的连系查询

  1. select * from yun_cashflow where money<62 and userid=32 and  createtime between '2018-10-22 09:06:58' and '2018-10-23 09:06:59' 

小总结三:成立完索引后,这种级联性子的查询,速率根基都很快,数据量不大的环境下,根基不会高出一秒。

因为时刻的范畴返回是56条数据,数据量较量小,以是速率快也许与这个有关,那尝试下前提多的数据结果会是什么样。

先试试加完索引, 金额前提的结果。

2千5百万的数据,返回时刻为11.460秒。

加一个用户数目较量多的前提 UserID=21

返回1000多万的数据,用了6秒

在找一个用户数目较量少的userid=34

返回4000多条,用不到1秒。

小总结四:前提返回的数据统计量越多,速率就越慢,高出1000万就慢的离谱,1秒阁下就是100万的量才行。

那。。。。。。。。。。。。咱们措施猿都知道,我们在做数据的时辰,都要用到分页。分页一样平常会用到LIMIT,好比每页10行,第二页就是LIMIT 10,10,得试试在分页的时辰,哪些页的环境下,会是什么样的结果呢?

  •  limit在1千时辰速率
  •  limit在1百万时辰速率
  •  limit在1万万时辰速率

小总结五:LIMIT 参数1,参数2  在跟着参数1(开始索引)增大时辰,这个速率就会越来越慢,假如要求1秒阁下返回时辰的速率是100万数据,在多在大就慢了,也就是,假如10条一页,当你到第10万页之后,就会越来越慢。假如到30万页之后,也许就会到不到一样平常体系的3秒要求了。

数据库都建上索引了,那我插数据速率有没有影响呢,那试试

也就是说100条数据插了快要5秒,均匀每秒插20条。

小总结六:也就是说,凭证这样的速率插入,并发量一但大的环境下,操纵起来会很慢。以是在有索引的前提下插入数据,要么索引失效,要么插入会出格慢。

分库分表的思想,一个大表返回那么大都据慢,那我把它酿成多少张表,然后每张表count(*)后,我统计累加一下,一合计,就是全部数据的查询功效的条数,然后就是到第几多页,我先算一下这页在哪个库,哪张表,在从那张表读不就完了。通过之前 的总结,100万数据返回为1秒,以是就一张内外放100万个数据,1亿的数据就100张表。

  1. BEGIN   
  2.         DECLARE `@i` int(11);      
  3.         DECLARE `@createSql` VARCHAR(2560);   
  4.         DECLARE `@createIndexSql1` VARCHAR(2560);   
  5.         DECLARE `@createIndexSql2` VARCHAR(2560);  
  6.         DECLARE `@createIndexSql3` VARCHAR(2560);  
  7.         set `@i`=0;   
  8.         WHILE  `@i`< 100 DO                  
  9.                             SET @createSql = CONCAT('CREATE TABLE IF NOT EXISTS yun_cashflow_',`@i`,'(  
  10. `id` bigint(20) NOT NULL AUTO_INCREMENT,  
  11.                                 `userid` int(11) DEFAULT NULL,  
  12.                                 `type` int(11) DEFAULT NULL  ,  
  13.                                 `operatoruserid` int(11) DEFAULT NULL  ,  
  14.                                 `withdrawdepositid` bigint(20) DEFAULT NULL  ,  
  15.                                 `money` double DEFAULT NULL  ,  
  16.                                 `runid` bigint(20) DEFAULT NULL  ,  
  17.                                 `createtime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,  
  18.                                 PRIMARY KEY (`id`)  
  19.                                 )'  
  20.                             );   
  21.                             prepare stmt from @createSql;   
  22.                             execute stmt;           

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读