gpt4 book ai didi

mysql - 如何优化这个复杂的 EAV MYSQL 查询?

转载 作者:可可西里 更新时间:2023-11-01 08:36:43 24 4
gpt4 key购买 nike

是否可以优化我写的这个查询

我创建了一种动态虚拟数据库,让我的用户能够在不影响数据库结构的情况下添加自定义字段。这是到目前为止结构的一个非常简化的 View 。

tables         | columns

db_cases       | caseid
db_structure | fieldname
db_data | fieldname, data, caseid
db_names | nameid
  • 我们可以通过向 db_structure 添加一行来创建一个新字段
  • 我们希望记录的任何数据都记录到 db_data。
  • 名称存储在 db_names 中,name_id 存储在 db_data 中

我正在尝试将案例输出到 html 表格

希望其余部分是不言自明的,您可以看到它是多么低效。我可以通过连接做同样的事情吗?

SELECT 
case_id,
(SELECT data_field_value
FROM db_data
WHERE data_case_id = case_id AND data_field_name = 'casestatus'
) AS casestatus,
(SELECT forename_company
FROM db_names
WHERE name_id = (SELECT data_field_value
FROM db_data
WHERE data_case_id = case_id AND data_field_name = 'client1'
)
) AS client1_forename_company
FROM db_cases

谢谢

最佳答案

事实上,Chibuzo 是对的。从删除它开始 :-)) 但在此之前,稍微玩一下它,这是一种很好的脑力锻炼,比如象棋之类的 :-)

select 
case_id,
d_status.data_field_value as case_status,
d_client1_name.forename_company as client1_forename_company
from db_cases
join db_data as d_status
on d_status.data_case_id = case_id
AND d_status.data_field_name = 'casestatus'
join db_data as d_client1
on d_client1.data_case_id = case_id
AND d_client1.data_field_name = 'client1'
join db_names as d_client1_name
on d_client1_name.name_id = d_client1.data_field_value

我希望这些没有子查询的直接连接会更有效率,尽管您必须对其进行测试 - 优化通常会有惊喜。

关于mysql - 如何优化这个复杂的 EAV MYSQL 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9981435/

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