面试官:一千万的数据,你是怎么查询的?

最近在给大家做模拟面试和简历优化,其中发现很多人一看到什么千万级数据之类的面试题就会腿软。

也许有些人没遇过上千万数据量的表,也不清楚查询上千万数据量的时候会发生什么。

今天就来带大家实操一下,这次是基于MySQL 5.7.26做测试

准备数据

没有一千万的数据怎么办?

没有数据自己不会造吗?

造数据难吗?

代码创建一千万?

那是不可能的,太慢了,可能真的要跑一天。可以采用数据库脚本执行速度快很多。

创建表
%ignore_pre_1%
创建数据脚本

采用批量插入,效率会快很多,而且每1000条数就commit,数据量太大,也会导致批量插入效率慢

DELIMITER ;;CREATE PROCEDURE batch_insert_log()BEGIN  DECLARE i INT DEFAULT 1;  DECLARE userId INT DEFAULT 10000000; set @execSql = 'INSERT INTO `test`.`user_operation_log`(`user_id`, `ip`, `op_data`, `attr1`, `attr2`, `attr3`, `attr4`, `attr5`, `attr6`, `attr7`, `attr8`, `attr9`, `attr10`, `attr11`, `attr12`) VALUES'; set @execData = '';  WHILE i<=10000000 DO   set @attr = "'测试很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长很长的属性'";  set @execData = concat(@execData, "(", userId + i, ", '10.0.69.175', '用户登录操作'", ",", @attr, ",", @attr, ",", @attr, ",", @attr, ",", @attr, ",", @attr, ",", @attr, ",", @attr, ",", @attr, ",", @attr, ",", @attr, ",", @attr, ")");  if i % 1000 = 0  then     set @stmtSql = concat(@execSql, @execData,";");    prepare stmt from @stmtSql;    execute stmt;    DEALLOCATE prepare stmt;    commit;    set @execData = "";   else     set @execData = concat(@execData, ",");   end if;  SET i=i+1;  END WHILE;END;;DELIMITER ;

开始测试

哥的电脑配置比较低:win10 标压渣渣i5 读写约500MB的SSD

由于配置低,本次测试只准备了3148000条数据,占用了磁盘5G(还没建索引的情况下),跑了38min,电脑配置好的同学,可以插入多点数据测试

SELECT count(1) FROM `user_operation_log`

返回结果:3148000

三次查询时间分别为:

14060 ms
13755 ms
13447 ms

普通分页查询

MySQL 支持 LIMIT 语句来选取指定的条数数据, Oracle 可以使用 ROWNUM 来选取。

MySQL分页查询语法如下:

SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset
第一个参数指定第一个返回记录行的偏移量
第二个参数指定返回记录行的最大数目

下面我们开始测试查询结果:

SELECT * FROM `user_operation_log` LIMIT 10000, 10

查询3次时间分别为:

59 ms
49 ms
50 ms

这样看起来速度还行,不过是本地数据库,速度自然快点。

换个角度来测试

相同偏移量,不同数据量

SELECT * FROM `user_operation_log` LIMIT 10000, 10SELECT * FROM `user_operation_log` LIMIT 10000, 100SELECT * FROM `user_operation_log` LIMIT 10000, 1000SELECT * FROM `user_operation_log` LIMIT 10000, 10000SELECT * FROM `user_operation_log` LIMIT 10000, 100000SELECT * FROM `user_operation_log` LIMIT 10000, 1000000

查询时间如下:

数量 第一次 第二次 第三次

10条53ms52ms47ms100条50ms60ms55ms1000条61ms74ms60ms10000条164ms180ms217ms100000条1609ms1741ms1764ms1000000条16219ms16889ms17081ms

从上面结果可以得出结束:数据量越大,花费时间越长

相同数据量,不同偏移量

SELECT * FROM `user_operation_log` LIMIT 100, 100SELECT * FROM `user_operation_log` LIMIT 1000, 100SELECT * FROM `user_operation_log` LIMIT 10000, 100SELECT * FROM `user_operation_log` LIMIT 100000, 100SELECT * FROM `user_operation_log` LIMIT 1000000, 100
偏移量 第一次 第二次 第三次

10036ms40ms36ms100031ms38ms32ms1000053ms48ms51ms100000622ms576ms627ms10000004891ms5076ms4856ms

从上面结果可以得出结束:偏移量越大,花费时间越长

SELECT * FROM `user_operation_log` LIMIT 100, 100SELECT id, attr FROM `user_operation_log` LIMIT 100, 100

如何优化

既然我们经过上面一番的折腾,也得出了结论,针对上面两个问题:偏移大、数据量大,我们分别着手优化

优化偏移量大问题

采用子查询方式

我们可以先定位偏移位置的 id,然后再查询数据

SELECT * FROM `user_operation_log` LIMIT 1000000, 10SELECT id FROM `user_operation_log` LIMIT 1000000, 1SELECT * FROM `user_operation_log` WHERE id >= (SELECT id FROM `user_operation_log` LIMIT 1000000, 1) LIMIT 10

查询结果如下:

sql 花费时间

第一条4818ms第二条(无索引情况下)4329ms第二条(有索引情况下)199ms第三条(无索引情况下)4319ms第三条(有索引情况下)201ms

从上面结果得出结论:

第一条花费的时间最大,第三条比第一条稍微好点
子查询使用索引速度更快

缺点:只适用于id递增的情况

id非递增的情况可以使用以下写法,但这种缺点是分页查询只能放在子查询里面

注意:某些 mysql 版本不支持在 in 子句中使用 limit,所以采用了多个嵌套select

SELECT * FROM `user_operation_log` WHERE id IN (SELECT t.id FROM (SELECT id FROM `user_operation_log` LIMIT 1000000, 10) AS t)
采用 id 限定方式

这种方法要求更高些,id必须是连续递增,而且还得计算id的范围,然后使用 between,sql如下

SELECT * FROM `user_operation_log` WHERE id between 1000000 AND 1000100 LIMIT 100SELECT * FROM `user_operation_log` WHERE id >= 1000000 LIMIT 100

查询结果如下:

sql 花费时间

第一条22ms第二条21ms

从结果可以看出这种方式非常快

注意:这里的 LIMIT 是限制了条数,没有采用偏移量

优化数据量大问题

返回结果的数据量也会直接影响速度

SELECT * FROM `user_operation_log` LIMIT 1, 1000000SELECT id FROM `user_operation_log` LIMIT 1, 1000000SELECT id, user_id, ip, op_data, attr1, attr2, attr3, attr4, attr5, attr6, attr7, attr8, attr9, attr10, attr11, attr12 FROM `user_operation_log` LIMIT 1, 1000000

查询结果如下:

sql 花费时间

第一条15676ms第二条7298ms第三条15960ms

从结果可以看出减少不需要的列,查询效率也可以得到明显提升

第一条和第三条查询速度差不多,这时候你肯定会吐槽,那我还写那么多字段干啥呢,直接 * 不就完事了

注意本人的 MySQL 服务器和客户端是在_同一台机器_上,所以查询数据相差不多,有条件的同学可以测测客户端与MySQL分开

SELECT * 它不香吗?

在这里顺便补充一下为什么要禁止 SELECT *。难道简单无脑,它不香吗?

主要两点:

用 “SELECT * ” 数据库需要解析更多的对象、字段、权限、属性等相关内容,在 SQL 语句复杂,硬解析较多的情况下,会对数据库造成沉重的负担。
增大网络开销,* 有时会误带上如log、IconMD5之类的无用且大文本字段,数据传输size会几何增涨。特别是MySQL和应用程序不在同一台机器,这种开销非常明显。

以上就是面试官:一千万的数据,你是怎么查询的?的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1020541.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月2日 01:16:15
下一篇 2025年12月2日 01:17:19

相关推荐

  • 知名的山寨币有哪些?2025年山寨币市值排行榜!

    Binance%ignore_a_1% 官网直达: 安卓安装包下载: 欧易OKX ️ 官网直达: 安卓安装包下载: Huobi火币️ 官网直达: 安卓安装包下载: 提到知名的山寨币,通常是指比特币之外那些有实际应用、较大社区和高市值的加密货币。2025年,随着区块链技术深入金融、AI、物联网等领域,…

    好文分享 2025年12月11日
    000
  • 山寨币是什么?值得关注吗?如何判断山寨币季来了?

    Binance%ignore_a_1% 官网直达: 安卓安装包下载: 欧易OKX ️ 官网直达: 安卓安装包下载: Huobi火币️ 官网直达: 安卓安装包下载: 山寨币简单说,就是除了比特币之外的所有加密货币。它们不只是一种“仿品”,更多是带着新功能或新理念出现的项目,比如做智能合约平台、去中心化…

    2025年12月11日
    000
  • 什么是加密货币中的预测市场?如何选择最具潜力的平台?一文详解

    %ignore_a_1%领域的预测市场,本质上是一种去中心化的信息集市和金融工具,它利用群体智慧对未来不确定的事件结果进行预测。其核心理念是“群众的智慧”,即相信一个足够大的群体,其平均判断力会比任何个体专家都更加准确。在区块链技术的加持下,这些市场摆脱了传统平台的中心化限制,参与者可以通过买卖代表…

    2025年12月11日
    000
  • 易欧交易所(okx交易平台) v6.135.0 安卓最新版

    易欧交易所(okx)是全球领先的数字资产交易平台之一,为用户提供安全、稳定、可靠的比特币、以太坊等加密货币交易服务。本页面提供易欧交易所 v6.135.0 安卓最新版app下载。 欧易官网直达: 欧易官方app: 安装教程与常见问题解决 由于部分安卓手机系统的安全策略,在下载并安装易欧交易所App时…

    2025年12月11日 好文分享
    000
  • BNB与SOL储备公司对比:亚洲与美国华尔街各自站队?

    目录 加密「财库」公司的崛起BNB 阵营:亚洲资本的「财库联盟」赵长鹏(CZ)谈加密资产财库策略(DAT)从 BTC、ETH 到 SOL:华尔街的第三条主线结语 加密「财库」公司的崛起 近年来,资本市场涌现出一批“数字资产财库”(Digital Asset Treasury,DAT)型上市公司:通过…

    2025年12月11日
    000
  • 加密货币中支撑位和阻力位是什么?如何判断支撑位和阻力位?

    目录 在股票交易的复杂世界中,阻力位和支撑位是两个至关重要的概念概念理解如何判断支撑位和阻力位阻力位和支撑位的计算方法理解支撑位 (Support Level)解析阻力位 (Resistance Level)支撑位与阻力位的形成原理支撑与阻力角色的相互转换阻力位和支撑位如何帮助投资者制定交易策略呢?…

    2025年12月11日 好文分享
    000
  • 以太坊官方app有哪些 以太坊官方app安装链接

    %ignore_a_1%作为一个去中心化的全球计算机,并没有由单个实体发布的“官方app”。用户与以太坊网络的交互通常通过两类应用完成:中心化交易所app和去中心化账户app。本文将为您介绍这两类应用中最主流、最受用户信赖的选择,帮助您安全便捷地进入以太坊世界。 主流交易平台App(获取以太坊的主要…

    2025年12月11日
    000
  • 加密货币是什么?优缺点解析

    %ignore_a_1%是基于区块链的去中心化数字资产,以比特币为代表,具有去中心化、低交易成本、高回报潜力、金融包容性和透明不可篡改等优点,但也存在价格波动大、安全风险高、监管不确定、使用门槛高及被用于非法活动等缺点,适合理性投资与长期技术理解。 Binance币安 官网直达: 安卓安装包下载: …

    2025年12月11日
    000
  • 以太坊名下的恐龙币是什么?在哪里买?

    本文旨在澄清%ignore_a_1%网络上“恐龙币”的概念,并提供一个关于如何安全查找和获取这类代币的通用指南。对于希望了解和参与此类新兴项目的用户,理解其高风险特性和正确操作流程至关重要。 以太坊全球安全买卖平台官网入口: 1、币安binance:  2、欧易OKX: 3、火币HTX: 4、大门G…

    2025年12月11日
    000
  • 哪些股票和比特币有关 一文了解比特币相关股票

    随着%ignore_a_1%市场影响力的扩大,部分上市公司的股价与其价格波动表现出高度相关性。本文旨在梳理与比特币紧密关联的几类代表性股票,帮助读者清晰地了解它们之间的联系和基本逻辑。 比特币全球合规交易平台官网入口及app安装包 1、币安Binance: 2、欧易OKX: 3、火币HTX: 4、大…

    2025年12月11日
    000
  • 安卓、苹果手机上如何添加欧易(OKX)小组件盯盘?

    目录 android 安卓手机 如何添加主屏幕小组件盯盘? 如何添加浮动小组件盯盘? 设备推荐设定 iOS 苹果手机 如何添加主屏幕小组件盯盘? 如何添加锁屏小组件盯盘? android 安卓手机 欧易为安卓用户提供了多种便捷的盯盘小组件,帮助您随时掌握市场动态,包括: 主屏幕小组件:直接在手机主屏…

    2025年12月11日 好文分享
    000
  • Web 2.0和Web 3.0有什么区别?一文带你搞懂两者的区别

    从互联网诞生至今,我们经历了从静态信息展示到动态交互的巨大变迁。Web 2.0时代,也就是我们当前所处的互联网环境,其核心特征是互动性和用户生成内容。社交媒体、博客、维基百科等都是Web 2.0的典型产物,它们将用户从单纯的信息接收者转变为内容的创造者和传播者。而Web 3.0则代表了一种新的网络范…

    2025年12月11日
    000
  • Okx下载V6.133.2注册与安装指南

    %ignore_a_1%是一款知名的数字资产服务平台,致力于为全球用户提供安全、便捷的交易体验。本指南旨在协助您顺利完成欧易app的下载与安装。为了您的账户安全和使用体验,本文提供官方正版app下载链接,点击此链接即可立即下载应用。 okx欧易App下载链接: okx欧易官方网站入口: 下载App步…

    2025年12月11日
    000
  • 加密货币是什么?优缺点大解析

    %ignore_a_1%是基于区块链的去中心化数字资产,如比特币和以太坊,具有全球流通快、技术创新潜力大、抗通胀和高收益潜力等优势,同时面临价格波动剧烈、监管不确定、安全风险高和能耗大等缺陷,投资者应谨慎参与,仅用可承受损失的资金投资主流币种并自主保管私钥。 加密货币是一种基于区块链技术的数字资产,…

    好文分享 2025年12月11日
    000
  • 探索区块链在供应链金融中的深度应用

    区块链技术通过分布式账本、不可篡改性和智能合约重塑供应链金融,解决信息不对称、降低信任成本、提升融资效率,并支持应收账款融资、库存融资、多级供应链金融等应用场景,构建透明可信的生态系统。 区块链技术,作为近年来的颠覆性创新,正逐步渗透到各个传统行业中,其中,供应链金融领域的变革潜力尤为巨大。传统的供…

    2025年12月11日
    000
  • 什么是去中心化应用程序 (dApp)?一文通俗解释中心化应用程序 (dApp)

    在理解去中心化应用程序(dApp)之前,我们有必要先了解我们日常接触的绝大多数应用程序,它们被称为中心化应用程序。我们手机上使用的社交媒体、购物平台、银行应用等,都属于中心化应用。这类应用的特点是其所有的数据和运营逻辑都储存在由某个公司或组织控制的中心服务器上。 这个中心化的实体拥有绝对的控制权,可…

    2025年12月11日
    000
  • binance币安交易所pc版v3.2.4官方电脑版安装攻略

    binance币安交易所作为业内领先的数字资产交易平台,致力于为用户提供安全、高效、便捷的交易服务。本教程将详细指导您如何下载并安装其官方电脑版v3.2.4客户端。为确保您获得的是正版应用程序,本文提供官方下载链接,用户只需点击链接即可轻松获取并开始使用。 binance币安交易所pc版入口: bi…

    2025年12月11日 好文分享
    000
  • 怎么建立自己的加密货币交易策略?

    先明确自身交易类型,再结合技术与基本面分析制定规则。从确定交易风格、选择分析工具,到设定入场出场信号与仓位管理,最后通过回测和模拟持续优化,构建可执行、可重复的个性化交易策略,实现风险可控的长期盈利。 怎么建立自己的加密货币交易策略? 嘿,朋友!想在波动的数字资产市场里站稳脚跟,光靠感觉和运气可不行…

    2025年12月11日
    000
  • 隐私保护存储:守护资产与隐私

    隐私保护存储是守护数字资产与个人信息安全的核心,通过加密、多重身份验证、安全备份和良好上网习惯,结合本地、云和去中心化存储的合理选择,有效防范黑客攻击、数据泄露等风险,确保数据的机密性、完整性和可用性。 在数字时代,个人数据的价值日益凸显,而数字资产的崛起更是让隐私保护存储成为我们每个人都必须认真面…

    2025年12月11日
    000
  • 2025全球数字货币交易所最新榜单TOP10盘点

    本文旨在全面梳理和盘点2025年全球数字货币交易所的最新格局。随着行业的不断演进,各大平台的综合实力、创新能力及用户基础均发生了显著变化。本榜单将基于安全性、交易量、产品多样性及市场声誉等多个维度,为广大用户提供一份权威且具备时效性的参考指南。 一、行业领先者平台 1、币安(binance)是全球领…

    2025年12月11日 好文分享
    000

发表回复

登录后才能评论
关注微信