gpt4 book ai didi

sql - 在 MySQL 中转换 UNION 查询

转载 作者:行者123 更新时间:2023-11-29 04:14:43 26 4
gpt4 key购买 nike

我有一个非常大的表 (8gb),其中包含有关文件的信息,我需要针对它运行一个看起来像这样的报告:

(select * from fs_walk_scan where file_path like '\\\\server1\\groot$\\%' order by file_size desc limit 0,30)
UNION ALL
(select * from fs_walk_scan where file_path like '\\\\server1\\hroot$\\%' order by file_size desc limit 0,30)
UNION ALL
(select * from fs_walk_scan where file_path like '\\\\server1\\iroot$\\%' order by file_size desc limit 0,30)
UNION ALL
(select * from fs_walk_scan where file_path like '\\\\server2\\froot$\\%' order by file_size desc limit 0,30)
UNION ALL
(select * from fs_walk_scan where file_path like '\\\\server2\\groot$\\%' order by file_size desc limit 0,30)
UNION ALL
(select * from fs_walk_scan where file_path like '\\\\server3\\hroot$\\%' order by file_size desc limit 0,30)
UNION ALL
(select * from fs_walk_scan where file_path like '\\\\server4\\iroot$\\%' order by file_size desc limit 0,30)
UNION ALL
(select * from fs_walk_scan where file_path like '\\\\server5\\iroot$\\%' order by file_size desc limit 0,30)
[...]
order by substring_index(file_path,'\\',4), file_size desc

此方法完成了我需要做的事情:获取每个卷的 30 个最大文件的列表。然而,这非常慢,并且“喜欢”搜索是硬编码的,即使它们位于另一个表中并且可以通过这种方式获得。

我正在寻找的是一种无需多次遍历大表即可执行此操作的方法。有人有什么想法吗?

谢谢。

附言我无法以任何方式更改巨大源表的结构。

更新:file_path 和 file_size 上有索引,但是这些子(?)查询中的每一个仍然需要大约 10 分钟,我必须至少做 22 分钟。

最佳答案

你在那个表上有什么样的索引?该指标:

在 fs_walk_scan(file_path, file_size desc) 上创建索引 fs_search_idx

会显着加快此查询的速度...如果您还没有这样的查询的话。

更新:

您说 file_path 和 file_size 上已经有索引...它们是单独的索引吗?或者是否有一个索引将两列一起索引?对于此查询,差异将是巨大的。即使有 22 个子查询,如果索引正确,这应该会非常快。

关于sql - 在 MySQL 中转换 UNION 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/163994/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com