我正在尝试将我们服务器上的响应时间降低到 250 毫秒范围内,大多数查询需要不到一毫秒的时间,而这一次需要很长时间。由于行数很大,超过 1500 毫秒。这是数据结构,是否可以采取任何措施来减少此查询的时间,或者使用不同的查询或以某种方式更快地设置我的数据?
mysql> describe variant_bikes;
+------------+-----------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+-----------------------+------+-----+---------+-------+
| variant_id | mediumint(8) unsigned | NO | PRI | 0 | |
| bike_id | mediumint(8) unsigned | NO | PRI | 0 | |
+------------+-----------------------+------+-----+---------+-------+
mysql> describe cscart_product_option_variants;
+----------------------+-----------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------------+-----------------------+------+-----+---------+----------------+
| variant_id | mediumint(8) unsigned | NO | PRI | NULL | auto_increment |
+----------------------+-----------------------+------+-----+---------+----------------+
15 rows in set (0.00 sec)
mysql> describe bikefilter_cache;
+---------+-----------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+-----------------------+------+-----+---------+----------------+
| bike_id | mediumint(8) unsigned | NO | PRI | NULL | auto_increment |
| year | smallint(6) unsigned | NO | PRI | NULL | |
| make | varchar(20) | NO | PRI | NULL | |
| line | varchar(20) | NO | PRI | NULL | |
| model | varchar(90) | NO | PRI | NULL | |
+---------+-----------------------+------+-----+---------+----------------+
mysql> select count(*) from variant_bikes;
+----------+
| count(*) |
+----------+
| 7577597 |
+----------+
1 row in set (1.85 sec)
mysql> select variant_id from variant_bikes where bike_id=112;
9366 rows in set (2.30 sec)
我之前尝试过的一件事,我认为至少在当时的大小上要慢得多,就是让 variant_bikes 成为一个带有 variant_id 的表,但 bike_ids 字段是 varchar 和/或文本,并且您搜索了一个逗号分隔的列表。
我想到的另一件事可能是将所有表排列成不同的更有效的数据结构。