这是我正在使用的查询:
SELECT p.name, p.id
FROM v_emp e
INNER JOIN v_prof p ON e.code = p.code
WHERE e.emp_id IN (SELECT a.id
FROM t_approval a
WHERE a.code1 <> 'R'
AND a.code2 = 'P'
AND a.date1 IS NULL
AND a.date2 IS NULL
AND a.code3 = 'ADMIN'
GROUP BY a.id
)
GROUP BY p.name, p.id
ORDER BY p.name
Run Code Online (Sandbox Code Playgroud)
查询执行时间超过4分钟.表t_approval有超过1500万条记录,我需要从该表中匹配搜索条件的不同ID.
该表已经有id,code1,code2,code3的索引.
请让我知道如何让这个运行得更快.
GROUP BY
条款存在?它们似乎都不是必需的,但由于我们不知道您的数据或数据模型,因此很难知道它们是否试图掩盖某些连接条件缺失的问题.t_approval
子查询返回的1500万行中有多少行?每个谓词的选择性如何?t_approval
桌面上.但是,目前尚不清楚您是在讨论单个复合索引还是4个单独的单列索引或其他内容.目前尚不清楚其他两个表上存在哪些索引.如果不知道您的数据模型是什么样的,如果不知道您的数据模型是什么样的,并且不知道谓词的选择性如何,那么很难猜出问题是什么,更不用说推测解决方案了.可能,因为您只是从一个表中选择列,并且因为我猜测子查询返回了多个行,所以可能更有效率
SELECT p.name, p.id
FROM v_prof p
WHERE EXISTS( SELECT 1
FROM v_emp e
JOIN t_approval a ON (e.emp_id = a.id)
WHERE e.code = p.code
AND a.code1 <> 'R'
AND a.code2 = 'P'
AND a.date1 IS NULL
AND a.date2 IS NULL
AND a.code3 = 'ADMIN' )
ORDER BY p.name
Run Code Online (Sandbox Code Playgroud)
如果这不起作用,您需要通过发布更多信息来帮助我们.
归档时间: |
|
查看次数: |
468 次 |
最近记录: |