ユーザーが靴のデータベースをサイズで検索できるようにするクエリがあります。彼らは、靴が現在在庫があるかどうかだけでなく、複数のサイズを選択することができます。
返される/選択されるサイズ/商品が多すぎない小規模な検索では、クエリは正常に実行されます。ただし、同時に複数のサイズを検索すると、クエリにかかる時間が大幅に長くなり、サーバーがクラッシュすることがよくあります。
SELECT DISTINCT `#__{vm}_product`.`product_id`, `product_name`, `products_per_row`,
`category_browsepage`, `category_flypage`, `#__{vm}_category`.`category_id`,
`product_full_image`, `product_thumb_image`, `product_s_desc`, `product_parent_id`,
`product_publish`, `product_in_stock`, `product_sku`, `product_url`, `product_weight`,
`product_weight_uom`, `product_length`, `product_width`, `product_height`,
`product_lwh_uom`, `product_available_date`, `product_availability`, `#__{vm}_product`.`mdate`,
`#__{vm} _product`.`cdate`, `#__{vm}_product_attribute`.`attribute_name`,
`#__{vm}_product_attribute`.`attribute_value`,
`#__{vm}_product_attribute`.`product_id`
FROM (`#__{vm}_product`, `#__{vm}_category`, `#__{vm}_product_category_xref`,
`#__{vm}_shopper_group`)
RIGHT JOIN `#__{vm}_product_attribute` ON `#__{vm}_product`.`product_id` =
`#__{vm_product_attribute`.`product_id`
WHERE (`#__{vm}_product_category_xref`.`product_id`=`#__{vm}_product`.`product_id` OR
`#__{vm}product_category_xref`.`product_id`=`#__{vm}_product`.`product_parent_id`) AND ((`#__{vm}_product_attribute`.`attribute_name` = 'Size') AND ((`#__{vm}_product_attribute`.`attribute_value` = '5'))) AND `#__{vm}_product_category_xref`.`category_id`=40 AND `product_publish`='Y'
GROUP BY `#__{vm}_product`.`product_sku`
ORDER BY CONVERT(`#__{vm}_product_attribute`.`attribute_value`, SIGNED INTEGER)
LIMIT 0, 999
出力には最初の24件の結果が表示されます。
複数のサイズを照会する場合に、照会にそれほど時間がかからないようにする方法があるはずだと思います。ヒントをいただければ幸いです。ありがとうございました!