游戏湿太|怎么快速查询?,面试官:一千万数据
前言
面试官:来说说 , 一千万的数据 , 你是怎么查询的?B哥:直接分页查询 , 使用limit分页 。 面试官:有实操过吗?B哥:肯定有呀此刻献上一首《凉凉》
也许有些人没遇过上千万数据量的表 , 也不清楚查询上千万数据量的时候会发生什么 。
今天就来带大家实操一下 , 这次是基于MySQL5.7.26做测试
准备数据
没有一千万的数据怎么办?
创建呗
代码创建一千万?那是不可能的 , 太慢了 , 可能真的要跑一天 。 可以采用数据库脚本执行速度快很多 。
创建表
CREATETABLE`user_operation_log`(`id`int(11)NOTNULLAUTO_INCREMENT,`user_id`varchar(64)CHARACTERSETutf8mb4COLLATEutf8mb4_general_ciNULLDEFAULTNULL,`ip`varchar(20)CHARACTERSETutf8mb4COLLATEutf8mb4_general_ciNULLDEFAULTNULL,`op_data`varchar(255)CHARACTERSETutf8mb4COLLATEutf8mb4_general_ciNULLDEFAULTNULL,`attr1`varchar(255)CHARACTERSETutf8mb4COLLATEutf8mb4_general_ciNULLDEFAULTNULL,`attr2`varchar(255)CHARACTERSETutf8mb4COLLATEutf8mb4_general_ciNULLDEFAULTNULL,`attr3`varchar(255)CHARACTERSETutf8mb4COLLATEutf8mb4_general_ciNULLDEFAULTNULL,`attr4`varchar(255)CHARACTERSETutf8mb4COLLATEutf8mb4_general_ciNULLDEFAULTNULL,`attr5`varchar(255)CHARACTERSETutf8mb4COLLATEutf8mb4_general_ciNULLDEFAULTNULL,`attr6`varchar(255)CHARACTERSETutf8mb4COLLATEutf8mb4_general_ciNULLDEFAULTNULL,`attr7`varchar(255)CHARACTERSETutf8mb4COLLATEutf8mb4_general_ciNULLDEFAULTNULL,`attr8`varchar(255)CHARACTERSETutf8mb4COLLATEutf8mb4_general_ciNULLDEFAULTNULL,`attr9`varchar(255)CHARACTERSETutf8mb4COLLATEutf8mb4_general_ciNULLDEFAULTNULL,`attr10`varchar(255)CHARACTERSETutf8mb4COLLATEutf8mb4_general_ciNULLDEFAULTNULL,`attr11`varchar(255)CHARACTERSETutf8mb4COLLATEutf8mb4_general_ciNULLDEFAULTNULL,`attr12`varchar(255)CHARACTERSETutf8mb4COLLATEutf8mb4_general_ciNULLDEFAULTNULL,PRIMARYKEY(`id`)USINGBTREE)ENGINE=InnoDBAUTO_INCREMENT=1CHARACTERSET=utf8mb4COLLATE=utf8mb4_general_ciROW_FORMAT=Dynamic;创建数据脚本
采用批量插入 , 效率会快很多 , 而且每1000条数就commit , 数据量太大 , 也会导致批量插入效率慢
DELIMITER;;CREATEPROCEDUREbatch_insert_log()BEGINDECLAREiINTDEFAULT1;DECLAREuserIdINTDEFAULT10000000;set@execSql='INSERTINTO`test`.`user_operation_log`(`user_id`,`ip`,`op_data`,`attr1`,`attr2`,`attr3`,`attr4`,`attr5`,`attr6`,`attr7`,`attr8`,`attr9`,`attr10`,`attr11`,`attr12`)VALUES';set@execData='';WHILEi<=10000000DOset@attr='''测试很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长的属性''';set@execData=https://pcff.toutiao.jxnews.com.cn/p/20200826/concat(@execData,''('',userId+i,'','10.0.69.175','用户登录操作''','','',@attr,'','',@attr,'','',@attr,'','',@attr,'','',@attr,'','',@attr,'','',@attr,'','',@attr,'','',@attr,'','',@attr,'','',@attr,'','',@attr,'')'');ifi%1000=0thenset@stmtSql=concat(@execSql,@execData,'';'');preparestmtfrom@stmtSql;executestmt;DEALLOCATEpreparestmt;commit;set@execData='''';elseset@execData=https://pcff.toutiao.jxnews.com.cn/p/20200826/concat(@execData,'','');endif;SETi=i+1;ENDWHILE;END;;DELIMITER;开始测试
哥的电脑配置比较低:win10标压渣渣i5读写约500MB的SSD
由于配置低 , 本次测试只准备了3148000条数据 , 占用了磁盘5G(还没建索引的情况下) , 跑了38min , 电脑配置好的同学 , 可以插入多点数据测试
- 游戏老斯鸡|李白首次加入,史诗优化二选一,小乔有全皮肤的巨赚!,8号皮肤碎片升值了
- 羽墨说游戏|开创了一代经典玩法,却因BUG走向没落,曾火遍网吧的射击网游
- 火线游戏|打野直接首发,IG二队获LDL冠军!网友:上单来一队打替补
- 游戏资讯小驿站|我的世界拔刀剑模组:独特设定!帮助玩家更深入了解刀的制作
- 游戏领航员|10月16发售,《帝国时代3决定版》上线Steam
- 游戏丹|高渐离和貂蝉我忍了,这两位真的忍不了!,开大就想一打五的英雄
- 游戏小青锋|王者荣耀:一级最有可能拿五杀的英雄是谁?这位法师当之无愧!
- 篝火营地|玩家《梦想世界》中打造《降世神通》游戏,用游戏制作“游戏”
- 大拿爱游戏|IG.Y,拿起那个属于你们的冠军,S11等你,捧杯吧
- Games游戏|复刻地图非常不错,玩家可以免费解馋,大神制作堡垒之夜版糖豆人