Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
联接表中的mySQL ORDER BY_Mysql_Sql Order By_Filesort - Fatal编程技术网

联接表中的mySQL 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

好的,我有下面的模式和查询,它非常慢(当使用真实数据时),因为orderby:

正如mysql man所说:“您正在连接许多表,ORDER BY中的列并不都来自用于检索行的第一个非恒定表(这是解释输出中没有常量连接类型的第一个表)。”


但我仍然需要按该列进行排序。我需要如何执行此操作?

更新:因为小提琴已更新:

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已经有索引,但在添加产品服务价格索引后,事情变得更快了: