我的问题是:
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语句中指定所需的字段。在生产使用查询中使用*是一种不好的形式,因为它鼓励您不必考虑哪些字段(以及它们可能有多大),更不用说您的示例中有两个不同的表,barcodesa
和barcodesb
具有潜在的不同数据类型和您正在联合的列顺序。。。。