我的问题是:

select * from
    (
    select * from barcodesA
    UNION ALL
    select * from barcodesB
    )
    as barcodesTOTAL, boxes
 where barcodesTotal.code=boxes.code;

表barcodesA有4000个条目
表barcodesB有4000个条目
表格框有大约180.000个条目
处理查询需要30秒。
另一个有问题的查询:
select * from
    viewBarcodesTotal, boxes
 where barcodesTotal.code=boxes.code;

viewBarcodesTotal包含来自两个条码表的UNION ALL。它也需要永远。
同时,
        select * from barcodesA , boxes where barcodesA.code=boxes.code
        UNION ALL
        select * from barcodesB , boxes where barcodesB.code=boxes.code

这一次不到1秒。
问题很明显是为什么?,我的代码被窃听了吗?mysql有漏洞吗?
我必须从access迁移到mysql,如果第一个选项出现错误,我必须重写所有代码。

最佳答案

如果您还没有索引,请在boxes.code上添加索引。将8000条记录(4K+4K)加入到180000条将受益于等式180K侧的索引。
另外,要显式,并在SELECT语句中指定所需的字段。在生产使用查询中使用*是一种不好的形式,因为它鼓励您不必考虑哪些字段(以及它们可能有多大),更不用说您的示例中有两个不同的表,barcodesabarcodesb具有潜在的不同数据类型和您正在联合的列顺序。。。。

10-06 12:08