葬空吟 2023-08-21 09:03 采纳率: 61%
浏览 16
已结题

MySQL的查询时间优化

在mysql数据库中有三张表,是通过抓取另一个数据库的数据,需要通过关联生成一张视图表,再通过Python处理将视图表生成实体表,现在的问题是三张基础表太大,生成的新表所需时间太长,应该如何解决?
基础表1:行:1633888 行,数据长度:496.00 MB,数据抓取时长:约20分钟
基础表2:行:94866 行,数据长度:12.52 MB,数据抓取时长:约1分钟
基础表3:行:1684084 行,数据长度:114.70 MB,数据抓取时长:约10分钟

生成的新表:行:1378266 行,数据长度:220.80 MB,数据生成时间(通过Python处理将视图表生成实体表):2天4小时

视图表的基本SQL逻辑:
select 需求字段, 通过 case WHEN 更改字段内容的字段,if判断字段内容生成的新字段(6个)
from (SELECT * FROM 基础表1 where 筛选条件) left join (SELECT * FROM 基础表2 where 筛选条件) left join (SELECT * FROM 基础表3 where 筛选条件)

我的需求是:将视图表生成实体表的时间缩短至2小时以内

PS:基础表中数据存在更新情况,所以表更新需要进行全量更新

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-08-21 10:07
    关注

    【以下回答由 GPT 生成】

    根据问题描述,你想要优化MySQL查询时间并减少视图表生成实体表所需的时间。下面是一些可能的解决方案和建议:

    1. 索引优化:确保你的基础表上有适当的索引。根据你的筛选条件和关联字段,创建相应的索引可以大大提高查询性能。你可以使用CREATE INDEX语句来创建索引示例如下: sql CREATE INDEX idx1 ON 基础表1 (关联字段); CREATE INDEX idx2 ON 基础表2 (关联字段); CREATE INDEX idx3 ON 基础表3 (关联字段);

    2. 分页查询:如果没有必要一次性查询所有数据,你可以考虑使用分页查询。通过限制每次查询的行数,可以减少查询所需的时间。你可以使用LIMIT关键字来指定返回的行数,例如: sql SELECT * FROM 基础表1 WHERE 筛选条件 LIMIT 1000; -- 只返回1000行数据

    3. 内存调优:通过调整MySQL的内存参数,可以提高查询性能。你可以尝试增加innodb_buffer_pool_size参数的值来提高缓存的数据量,从而加快查询速度。你可以在MySQL的配置文件中修改该参数,例如: [mysqld] innodb_buffer_pool_size = 2G

    4. 性能调优:使用EXPLAIN语句来分析查询计划,并查看是否可以通过修改查询方式或引入合适的索引来优化查询。例如: sql EXPLAIN SELECT * FROM 基础表1 WHERE 筛选条件;

    5. 使用临时表:如果你的视图表查询非常复杂,可能需要考虑使用临时表。将视图表的查询逻辑分解为多个步骤,并且将每个步骤的结果保存在临时表中,然后再合并这些临时表生成最终的实体表。

    6. 定时生成表:如果你的数据更新频率不是很高,可以考虑定时生成实体表,而不是每次查询时都生成。通过将数据缓存在实体表中,可以大大减少查询时间,并提高整体性能。

    如果以上方法都不能满足你的需求,还可以考虑以下其他方案:

    • 分布式处理:将数据分散到多个数据库服务器上,并使用分布式处理框架来并行处理数据。这样可以减少每台服务器上的数据量,从而提高处理速度。

    • 数据分区:将基础表进行数据分区,可以将数据拆分为更小的块,从而减少查询和处理的数据量。

    • 使用缓存:如果视图表的数据不需要实时更新,可以考虑将生成的实体表数据缓存起来,下次查询时直接使用缓存数据,从而节省生成时间。

    希望以上解决方案能够对你有所帮助,如果还有其他问题,请提供更多详细信息,我将尽力提供更准确的帮助。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 8月22日
  • 已采纳回答 8月22日
  • 修改了问题 8月21日
  • 创建了问题 8月21日

悬赏问题

  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音
  • ¥30 Pytorch深度学习服务器跑不通问题解决?
  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Bug traq 数据包 大概什么价
  • ¥15 在anaconda上pytorch和paddle paddle下载报错
  • ¥25 自动填写QQ腾讯文档收集表