1 つの e コマース サイトを強化する itemsという名前の innodb テーブルがあります。検索システムを使用すると、オプション/追加フィールドを検索できるため、たとえば、修理されたコンピューターのみを検索したり、2000 年より古い車のみを検索したりできます。
これは、items_fieldsという追加のテーブルを介して行われます。非常にシンプルなデザインです。
+------------+------------------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| field_id | int(11) | NO | MUL | NULL | |
| item_id | int(11) | NO | MUL | NULL | |
| valueText | varchar(500) | YES | | NULL | |
| valueInt | decimal(10,1) unsigned | YES | | NULL | |
+------------+------------------------+------+-----+---------+----------------+
フィールド名とタイプのみを含むフィールドと呼ばれるテーブルもあります。
検索結果を返す主なクエリは次のとおりです。
SELECT items...
FROM items
WHERE items... AND (
SELECT count(id)
FROM items_fields
WHERE items_fields.field_id = "59" AND items_fields.item_id = items.id AND
items_fields.valueText = "Damaged")>0
ORDER by ordering desc LIMIT 35;
大規模 (1 日あたり 400 万以上の検索クエリのみ) では、これらの高度な検索をさらに最適化する必要があります。現在、平均的な高度な検索クエリには約 100 ミリ秒かかります。
このクエリを高速化するにはどうすればよいですか? 他に最適化のための提案やアドバイスはありますか? 両方のテーブルはinnodbで、サーバースタックは絶対に素晴らしいですが、それでもこのクエリを解決する必要があります:)