MySQL 查询优化以最小化运行时间

问题描述 投票:0回答:1

我需要优化 MySQL 中的以下查询。

基表“A”大约有 9.94 亿条记录。

有没有办法修改not in子句,因为exist子句不适用于MySQL

SELECT DISTINCT
    a.Cola1 AS Col1
FROM
    db.tableA a
        INNER JOIN
    db.tableB b ON a.cola2 = b.colb1
        INNER JOIN
    db.tableC c ON b.colb2 = c.colc1
WHERE
    (c.colc2 = 2 OR (c.colc2 = 7047 AND a.cola3 = '04250'))
        AND a.Col1 NOT IN (334394 , 334223, 334222, 305669)
ORDER BY a.Col1
mysql optimization query-optimization
1个回答
0
投票

这里有 2 个建议(在没有提供示例数据的情况下提出)

SELECT a.Cola1 AS Col1
FROM tableA a
WHERE EXISTS (
        SELECT 1
        FROM tableB b
        WHERE a.cola2 = b.colb1 
        AND EXISTS (
                SELECT 1
                FROM tableC c
                WHERE b.colb2 = c.colc1 AND (c.colc2 = 2 OR (c.colc2 = 7047 AND a.cola3 = '04250'))
                )
        ) 
AND a.Cola1 NOT IN (334394, 334223, 334222, 305669)
ORDER BY a.Cola1;


SELECT a.Cola1 AS Col1
FROM tableA a
WHERE a.Cola2 IN (
        SELECT colb1
        FROM tableB b
        WHERE EXISTS (
                SELECT 1
                FROM tableC c
                WHERE b.colb2 = c.colc1 AND (c.colc2 = 2 OR (c.colc2 = 7047 AND a.Cola3 = '04250'))
                )
        ) 
AND a.Cola1 NOT IN (334394, 334223, 334222, 305669)
ORDER BY a.Cola1;

这里有工作示例fiddle

© www.soinside.com 2019 - 2024. All rights reserved.