记一次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大表优化

建立索引

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

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

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

完成 测试

果然起飞1212 ms

记一次mysql 4.5GB大表优化

在多请求几次

记一次mysql 4.5GB大表优化

最后稳定在100ms

本作品采用《CC 协议》,转载必须注明作者和本文链接
不成大牛,不改個簽
讨论数量: 3

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

1个月前 评论

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

1个月前 评论

求个车型库。。。

3周前 评论

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