gpt4 book ai didi

mysql - 寻找一种有效的方法,通过另一个非常小的表中的信息来转换巨大的 MariaDB 表中的值

转载 作者:行者123 更新时间:2023-11-29 23:15:19 25 4
gpt4 key购买 nike

问题:

  • 在具有 10 mio 行的表 a 中,我有一列 a.profession_id ,其中包含客户的编码职业(0、1、2、... )。

  • 在另一个非常小的表b中,我有这些职业的一些(不是全部)“翻译”(0 = 失业,1 = worker ,...)。

目标:

  • 我想以高效(快速)的方式利用现有信息增强我的巨大表格。

不工作:

  • INNER JOIN 因为我没有所有翻译

  • 经典LEFT JOIN,因为a.profession_id上的索引将不会被使用,并且b.profession_id上的索引将不会使用' t 加快速度

    从a.profession_id = b.profession_id上的左连接b中选择*

解决方案:

  • 到目前为止,您有什么聪明的意见吗?

最佳答案

如果你绝对必须做翻译,并且无法避免这样做......

第二个最佳选择(纯粹就数据库性能而言,没有其他考虑)是忽略小表并在 SELECT 列表中使用静态表达式:

SELECT r.profession_id
, CASE r.profession_id
WHEN 0 THEN 'unemployed'
WHEN 1 THEN 'worker'
WHEN 2 THEN '...'
ELSE ''
END AS profession_name
FROM table_with_10_mio_rows r

如果职业查找列表不是静态的,那么这种方法就有缺点。 (如果有一个静态列表,并且职业不是我们数据模型中的实体,我们实际上可能会考虑将职业实现为 enum 数据类型。)

作为一个单独的步骤,为了帮助我们快速填写 CASE 表达式,我们可以使用查找表:

SELECT CONCAT('       WHEN ',t.id,' THEN ''',REPLACE(t.name,'''',''''''),'''') AS expr
FROM small_profession_lookup_table t
ORDER BY id

如果某些职业出现频率更高,请将其移至列表顶部。

关于mysql - 寻找一种有效的方法,通过另一个非常小的表中的信息来转换巨大的 MariaDB 表中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27864487/

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