记一次mysql 4.5GB大表优化

背景

最近在做一个系统 需要去爬取一些可用的车型数据。昨晚脚本跑了几小时,今天一看哇,这么多数据~(ps 还有一张同级别的英文数据的表)还好做了分表处理

表数据

mysql大表优化

表结构

mysql大表优化

前端ui

记一次mysql 4.5GB大表优化

系统其中一个这个接口需求大概是这样的:

swId是车的品牌id 用户进入这个页面就会开始选择拉的数据 分别获取make车型,model系统,year年款

大概数据结构

{
    "code": 200,
    "message": "success",
    "data": [
        "MINI",
        "SMART",
        "一汽丰田",
        "一汽佳宝",
        "一汽森雅",
        "一汽轿车",
        "一汽马自达"
        ]
}

未做任何处理查表:接口响应

记一次mysql 4.5GB大表优化

大概需要27s

第一步调整存储引擎MyISAM 大数据读多写少的时候 使用MyISAM会大大减少数据检索时间

此时查询时间26.51s下降到了15.79s

记一次mysql 4.5GB大表优化

建立索引

  • 注意大表数据建立索引也会占用大量的空间 所以我们遵循从左到右的规则

这个接口都涉及到sw_id字段的查询 所以我们先给这个字段建立一个普通索引

ALTER TABLE `system_model_year` ADD INDEX sw_i(`sw_id`) 

完成 测试

果然起飞1212 ms

记一次mysql 4.5GB大表优化

在多请求几次

记一次mysql 4.5GB大表优化

最后稳定在100ms

本作品采用《CC 协议》,转载必须注明作者和本文链接
不成大牛,不改個簽
本帖由系统于 2年前 自动加精
讨论数量: 8

大哥,一个索引可以对查询起到这么吊的作用吗! :heart_eyes:

2年前 评论

@Wero 虽然表数据很大,但是索引命中之后,避免了全表扫描。查询速度只跟 swId=b的数量有关了。具体可以看看这篇文章

2年前 评论

求个车型库。。。

2年前 评论

1.建议表和字段 必须添加中文注释[规范]

2.字段 竟然允许为NULL,不符合规范

3.字段命名有下划线的 有驼峰的 规则不统一.

4.慢SQL优化 还是要把SQL拿出来 用explain分析工具进行分析

5.轻易不要修改表的引擎规则

个人拙见. :blush:

2年前 评论
apicreator 2年前

这也能称之为优化嘛,这不都是表设计初期该考虑到的事情么

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!