MySQL大数据量查询:一次读取一万条记录会带来哪些性能问题?

说实话,一次性读取1 0000条MySQL记录太愚蠢了。
他立刻就崩溃了。

谈谈高IO首次加载。
想想看,如果MySQL想要读取1 0,000个项目,它就必须在硬盘中查找它们。
尽管地图制作精良且经过审查,但仍需要好几页才能归还。
例如,必须从硬盘驱动器中找到并读取 InnoDB 文件。
您有一个包含 3 00,000 个条目的表(即 5 00MB)。
如果每次搜索时都扫描整个表格,那么您的硬盘肯定会损坏。
我之前的公司搞活动,用户多的时候,把整个订单表都扫描完了,立马就卡在数据库里了。

内存压力增加。
对于1 0000条数据,MySQL首先要把它压入内存,并进行排序和过滤。
服务器内存不足,频繁交换导致外部(Swap)内存直接溢出。
我见过一台设置有 1 2 8 MB buffer_pool 的机器,查看数以万计的缓存会立即破坏内存。
最糟糕的是内存满了,查找单元和索引单元都没有用了,后续查询就更慢了。

前端进程根本处理不了。
导航器立即要求 1 0,000 件物品,并卡在 dom 队伍中。
在做H5 的时候,用户查看库存,一次拿到了5 000件商品,页面一片空白。
但它也会消耗电量,移动用户在挂断电话时会等待。

该怎么办?分页。
使用 END 偏移量、大小。
例如,如果它们位于第 2 0 页,请使用 END 0, 2 0 查看第一页。
这是一个巨大的骗局:
1 我下去了。
一次只扫描2 0个项目,因此对硬盘的压力很小。
2 .内存足够。
检查 2 0 项并使其易于记住。
3 .前端很棒。
先返回2 0个,这样用户就不用等一分钟了。

还必须添加索引。
在何处书写并按字段排序。
最好使用索引屏幕,这样可以直接从索引中获取数据,除非可以查看整个表。
不是一个大非人。
FINISH 1 0000 需要 2 0 次 ret 来扫描前 1 002 0 次 ret,速度慢得离谱。
您可以改为使用光标,记住最后一个最大ID,下次单击“WHERE ID > 最后一个最大ID 2 0”。

阅读和写作之间也存在分离。
大型查询被发送到数据库服务器,数据库主机参与编写它们。
我们这些年承担的功能包括页面优化+索引优化+律写分离,数据库的性能提升了9 0%以上。

mysql写入慢的解决方法与解决方案分享

如何在mysql中优化MyISAM表读写性能

密钥缓存设置:key_buffer_size=物理内存的2 5 %,目标>9 9 .9 %已实现。

索引优化:将TEXT字段拆分为子表。
用户描述拆分已确认于2 01 9 年生效。

批量写入:INSERT语法合并以避免INSERTDELAYED。

维护操作:OPTIMIZE TABLE的执行周期为每月一次,ANALYZE TABLE的执行周期为每周一次。

监控按键:SHOW STATUS 'Key_reads' > 1 000次/秒调整缓存。