mysql sort by子句中的If语句导致超时

pkln4tw6  于 10个月前  发布在  Mysql
关注(0)|答案(1)|浏览(77)

我在SQL中运行一个非常基本的选择语句,将两个表连接在一起。当我排除“ORDER BY”子句时,它运行得很好。但是,当我添加“ORDER BY”时,由于表有数百万个结果,查询超时。有什么建议可以解决这个问题,以优化性能吗?

ORDER  BY IF(table1.name IS NULL
              OR table1.name = '', table2.uuid,
          table1.name),
          table2.uuid

字符串
我删除了顺序,只是在table2.uuid上排序,这提高了性能,并在ms中运行查询。我希望通过table1.name排序,并保留功能,但如果可能的话,改进其完成方式。

wixjitnu

wixjitnu1#

索引:请确保对ORDER BY子句中使用的列进行了索引。索引可以显著加快排序操作的速度。在您的情况下,请考虑对IF条件中使用的列和table2.uuid列进行索引。

sql
CREATE INDEX idx_table1_name ON table1(name);
CREATE INDEX idx_table2_uuid ON table2(uuid);

字符串

**优化ORDER BY子句:**如果可能的话,请简化ORDER BY子句。在您的情况下,您可能会尝试避免在ORDER BY子句中直接使用IF等函数。相反,您可以使用CASE语句:

ORDER BY
    CASE
        WHEN table1.name IS NULL OR table1.name = '' THEN table2.uuid
        ELSE table1.name
    END,
    table2.uuid;

相关问题