gpt4 book ai didi

mysql - 从多个表中合并排序数据的有效方法

转载 作者:可可西里 更新时间:2023-11-01 07:09:04 25 4
gpt4 key购买 nike

我有一系列包含类似格式数据的表格。 IE。 UNION 会起作用。从概念上讲,您可以将其视为分区为多个表的 1 个表。我想对所有这些表中的数据进行排序。
现在我遇到的问题是数据太多,无法一次全部显示给用户,所以我需要分段显示它们,即页面。
现在我的问题是我需要显示排序的数据(如前所述)。

所以如果我做类似的事情:

SELECT FROM TABLE_1  
UNION
SELECT FROM TABLE_2
UNION
....
SELECT FROM TABLE_N
ORDER BY COL
LIMIT OFFSET, RECORDS;

我会经常做一个 UNIONORDER BY 来得到例如每个请求的页面只有相应的 50 条记录。

那么我该如何最有效地处理这个问题?

最佳答案

我的第一次尝试是 UNION 只是从每个表中提取少量记录:

( SELECT FROM table_1 ORDER BY col LIMIT @offset, @records )
UNION
...
( SELECT FROM table_N ORDER BY col LIMIT @offset, @records )
ORDER BY col LIMIT @offset, @records

如果以上证明不够,我会建立一个手动索引表(基于 David Starkey 的聪明建议)。

CREATE TABLE index_table (
table_id INT,
item_id INT,
col DATETIME,
INDEX (col, table_id, id)
);

然后用您喜欢的方法填充 index_table(cron 作业,表 table_n 上的触发器,...)。您的 SELECT 语句将如下所示:

SELECT *
FROM ( SELECT * FROM index_table ORDER BY col LIMIT @offset, @records ) AS idx
LEFT JOIN table_1 ON (idx.table_id = 1 AND idx.item_id = table_1.id)
...
LEFT JOIN table_n ON (idx.table_id = n AND idx.item_id = table_n.id)

但是,我不确定这样的查询在有这么多 LEFT JOIN 的情况下会如何执行。这实际上取决于有多少张表table_n

最后,我会考虑将所有表合并为一个表。

关于mysql - 从多个表中合并排序数据的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16529665/

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