联接表中的mySQL ORDER BY
好的,我有下面的模式和查询,它非常慢(当使用真实数据时),因为orderby: 正如mysql man所说:“您正在连接许多表,ORDER BY中的列并不都来自用于检索行的第一个非恒定表(这是解释输出中没有常量连接类型的第一个表)。”联接表中的mySQL ORDER BY,mysql,sql-order-by,filesort,Mysql,Sql Order By,Filesort,好的,我有下面的模式和查询,它非常慢(当使用真实数据时),因为orderby: 正如mysql man所说:“您正在连接许多表,ORDER BY中的列并不都来自用于检索行的第一个非恒定表(这是解释输出中没有常量连接类型的第一个表)。” 但我仍然需要按该列进行排序。我需要如何执行此操作?更新:因为小提琴已更新: SELECT cpa.product_id, cp.product_internal_ref, cp.product_name, cpa.produ
但我仍然需要按该列进行排序。我需要如何执行此操作?更新:因为小提琴已更新:
SELECT
cpa.product_id,
cp.product_internal_ref,
cp.product_name,
cpa.product_sale_price,
cpa.is_product_service,
cpa.product_service_price
FROM
catalog_products_attributes cpa
JOIN
catalog_products cp ON cp.product_id = cpa.product_id
WHERE
cpa.product_id IN (
SELECT
product_id
FROM
catalog_products_categories
WHERE
category_id = 41
)
ORDER BY
cpa.product_service_price DESC
此外,我尝试了您的查询,速度比我的慢了2倍…:(我刚刚修改了fiddle,请看一看。使用您的解决方案确实会大大提高性能。但我想知道在没有派生表的情况下是否还有其他方法可以做到这一点。谢谢您,我还查看了您更新的查询,但它使用了一个依赖子查询,这会降低性能(我使用真实数据进行了测试)基准测试结果是什么?您可以在
类别id
(这将用于筛选)和cpa上添加索引。产品服务价格
(这将用于排序)类别id已经有索引,但在添加产品服务价格索引后,事情变得更快了: