gpt4 book ai didi

sql - 优化具有多个连接的 SQL 查询

转载 作者:行者123 更新时间:2023-12-01 09:34:24 25 4
gpt4 key购买 nike

我的数据库中有以下表格,我无法更改或修改。我使 Log 表保持简单,但 LogDetail 与我的数据库中的相同。

日志表

 Id  User Department Service     Method

21 John Sales UserService GetUser

LogDetail 表

Id LogRef ParamName  ParamValue

30 21 FirstName Adam
31 21 LastName Smith
32 21 Age 35
33 21 Gender M

现在,我正在使用以下查询来获取搜索者(Adam,Smith,35,M)

SELECT 
L.*, D1.ParamName, D2.ParamName, D3.ParamName, D4.ParamName
FROM Log as L
INNER JOIN LogDetail as D1 on L.Id = D1.LogRef
INNER JOIN LogDetail as D2 on L.Id = D2.LogRef
INNER JOIN LogDetail as D3 on L.Id = D3.LogRef
INNER JOIN LogDetail as D4 on L.Id = D4.LogRef
WHERE
D1.ParamName='FirstName' and D1.ParamValue='Adam' and
D2.ParamName='LastName' and D2.ParamValue='Smith' and
D3.ParamName='Age' and D3.ParamValue=35 and
D4.ParamName='Gender' and D4.ParamValue='M'

有没有更好的方法来做到这一点?

最佳答案

当您使用 EAV 时会发生这种情况架构(基本上是键值对)

除了在 (ParamName, ParamValue) 上为 LogDetail 添加索引之外,您无能为力。这假设聚集索引保持为 LogRef

关于sql - 优化具有多个连接的 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10831022/

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