サーバーの応答時間を250ミリ秒の範囲に抑えようとしています。ほとんどのクエリは1ミリ秒未満で完了します。これは、それ自体で長い時間がかかります。行数が多いため、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)
私が以前に試した1つのことは、少なくとも当時のサイズでははるかに遅いと思います。variant_bikesをそのままvariant_idのテーブルにすることでしたが、bike_idsフィールドはvarcharまたはtext、あるいはその両方であり、コンマ区切りのリストを検索しました。
私が考えるもう1つのことは、すべてのテーブルを別のより効率的なデータ構造に配置することです。