Mysql 表优化以获得更好的性能

时间:2021-02-08 15:13:41

标签: mysql percona mysql-5.6

CREATE TABLE Car (
`id` bigint(30) NOT NULL,
`name` varchar(40) COLLATE utf8_unicode_ci NOT NULL
) 

CREATE TABLE Checkpoints (
  `id` bigint(30) NOT NULL AUTO_INCREMENT,
  `car_id` int(11) NOT NULL,
  `check_point_name` varchar(40) COLLATE utf8_unicode_ci NOT NULL,
  `expected_time` datetime DEFAULT NULL,
  `actual_time` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `index_car_id` (`car_id`),
  KEY `car` (`check_point_name`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;


mysql> select * from car;
+----+---------+
| id | name    |
+----+---------+
|  1 | Ferrari |
+----+---------+

mysql> select * from Checkpoints;
+----+--------+------------------+---------------------+---------------------+
| id | car_id | check_point_name | expected_time       | actual_time         |
+----+--------+------------------+---------------------+---------------------+
|  1 |      1 | Point1           | 2021-02-01 15:00:00 | 2021-02-15 15:01:00 |
|  2 |      1 | Point2           | 2021-02-01 15:20:00 | 2021-02-01 15:23:19 |
|  3 |      1 | Point3           | 2021-02-01 15:30:00 | 2021-02-01 15:32:19 |
|  4 |      1 | Point4           | 2021-02-01 15:40:00 | 2021-02-01 15:40:19 |
|  5 |      1 | Point5           | 2021-02-01 15:50:00 | 2021-02-01 15:50:19 |
|  6 |      1 | Point5           | 2021-02-01 15:50:00 | 2021-02-01 15:50:00 |
+----+--------+------------------+---------------------+---------------------+

当前 mysql 版本:5.6.44

每辆车都会有多个检查点及其预计到达时间和实际到达时间。我面临的问题 track_car 表不断增长为巨大的表,这导致查询速度缓慢并导致 mysql 性能下降(上面是我能想出的最好的例子来解释这个问题:))。

为了优化这个表,考虑将 track_car 数据移动到 JSON/Text 单行,其中包含所有这些值的 JSON 字符串。

任何人都可以建议我们是否有其他方法来解决这个不断增长的表格。

0 个答案:

没有答案