sql优化 SELECT PARENT_ORG_ID FROM TD_BFM_ORG WHERE PARENT_ORG_ID NOT IN (SELECT DISTINCT ORG_ID FROM TD_BFM_ORG)
时间: 2023-07-24 11:46:23 浏览: 45
这个 SQL 语句的意思是查询 `TD_BFM_ORG` 表中所有不在 `TD_BFM_ORG` 表中 `ORG_ID` 字段中出现过的 `PARENT_ORG_ID` 字段值。
优化可以从以下几个方面入手:
1. 使用 `NOT EXISTS` 替代 `NOT IN`,因为 `NOT IN` 的子查询结果集中如果存在 NULL 值,那么整个查询结果都是空的,而 `NOT EXISTS` 没有这个问题。
2. 添加索引:可以为 `TD_BFM_ORG` 表的 `PARENT_ORG_ID` 字段和 `ORG_ID` 字段分别创建索引,这样可以加快查询速度。
3. 减少子查询:可以将 `DISTINCT` 替换成 `GROUP BY`,这样可以减少子查询的数量。
优化后的 SQL 语句如下:
```sql
SELECT PARENT_ORG_ID
FROM TD_BFM_ORG t1
WHERE NOT EXISTS (
SELECT 1
FROM TD_BFM_ORG t2
WHERE t2.ORG_ID = t1.PARENT_ORG_ID
)
```
并且为 `PARENT_ORG_ID` 和 `ORG_ID` 分别创建索引:
```sql
CREATE INDEX idx_parent_org_id ON TD_BFM_ORG(PARENT_ORG_ID);
CREATE INDEX idx_org_id ON TD_BFM_ORG(ORG_ID);
```
相关问题
flame_albedo_from_bfm.npz
flame_albedo_from_bfm.npz 是一个包含皮肤反射率属性的文件,其中包含由 Balanced Face Model (BFM) 生成的 FLAME 模型所使用的皮肤反射率系数信息。BFM 是一种具有20,000多个3D面点的面部建模方法,它使用可变形模板进行面部形状建模,并通过光照模型计算面部皮肤的反射率。使用FLAME模型对人脸进行建模时,需要考虑到光照对皮肤反射率的影响,因此FLAME模型的生成需要这种皮肤反射率系数信息。这个文件中的数据是由人脸图像和相应的反射率图像进行学习得到的,这些图像用于训练一个神经网络,从而可以生成实际人脸图像的皮肤反射率。该文件通常用于生物医学工程等领域的相关研究中,例如面部跟踪、面部识别、面部表情和年龄估计等。
ahb lite总线接口 与验证bfm的连接举例代码
以下是一个简单的UVM代码示例,展示了如何将AHB Lite总线接口和验证BFM连接起来:
```systemverilog
// AHB Lite总线代理
class ahb_lite_agent extends uvm_agent;
// AHB Lite总线接口
ahb_lite_if ahb_lite_port;
// UVM TLM分析器
uvm_tlm_analysis_port#(ahb_lite_transaction) ahb_lite_analysis_port;
function new(string name, uvm_component parent);
super.new(name, parent);
endfunction
function void build_phase(uvm_phase phase);
// 创建AHB Lite总线接口并将其绑定到UVM端口
ahb_lite_port = new("ahb_lite_port");
ahb_lite_port.connect(uvm_tb_top.env.ahb_lite_bus);
// 创建UVM TLM分析器
ahb_lite_analysis_port = new("ahb_lite_analysis_port", this);
endfunction
function void run_phase(uvm_phase phase);
// 向AHB Lite总线发送事务
ahb_lite_transaction txn = new;
// ...
ahb_lite_port.write(txn);
// 将AHB Lite总线事务转换为UVM TLM事务并发送到验证BFM
ahb_lite_analysis_port.write(txn);
endfunction
endclass
// 验证BFM代理
class verification_bfm_agent extends uvm_agent;
// 验证BFM接口
verification_bfm_if bfm_port;
// UVM TLM代理
uvm_tlm_analysis_imp#(ahb_lite_transaction) ahb_lite_analysis_imp;
function new(string name, uvm_component parent);
super.new(name, parent);
endfunction
function void build_phase(uvm_phase phase);
// 创建验证BFM接口并将其绑定到UVM端口
bfm_port = new("bfm_port");
bfm_port.connect(uvm_tb_top.env.bfm);
// 创建UVM TLM代理
ahb_lite_analysis_imp = new("ahb_lite_analysis_imp", this);
endfunction
function void run_phase(uvm_phase phase);
// 接收UVM TLM事务并将其转换为验证BFM操作
forever begin
ahb_lite_transaction txn;
ahb_lite_analysis_imp.peek(txn);
// ...
bfm_port.write(txn);
ahb_lite_analysis_imp.get();
end
endfunction
endclass
```
在上面的代码示例中,AHB Lite总线代理和验证BFM代理分别实现了AHB Lite总线接口和验证BFM接口,并通过UVM TLM端口进行交互。AHB Lite总线代理中创建了一个UVM TLM分析器,将AHB Lite总线事务转换为UVM TLM事务并发送到验证BFM代理。验证BFM代理中创建了一个UVM TLM代理,接收UVM TLM事务并将其转换为验证BFM操作发送到验证BFM接口。