mysql - 如何使用 OR 条件提高 SQL JOIN 的性能
问题描述
复杂的 JOIN 查询为:
SELECT
FIRST.NAME,
SECOND.FIRST_NAME,
SECOND.LAST_NAME
FROM FIRST_TABLE FIRST
LEFT JOIN SECOND_TABLE SECOND
ON (SECOND.FIRST_NAME = FIRST.NAME OR SECOND.LAST_NAME = FIRST.NAME)
将导致性能不佳。
如何获得更好的性能?
解决方案
这回答了问题的原始版本。
你可能会更好exists
:
SELECT FIRST.ID, FIRST.NAME
FROM FIRST_TABLE FIRST
WHERE EXISTS (SELECT 1 FROM SECOND_TABLE SECOND WHERE SECOND.FIRST_NAME = FIRST.NAME) OR
EXISTS (SELECT 1 FROM SECOND_TABLE SECOND WHERE SECOND.LAST_NAME = FIRST.NAME);
SECOND_TABLE(LAST_NAME)
然后为了性能,您需要AND上的索引SECOND_TABLE(FIRST_NAME)
。
推荐阅读
- flutter - 无法在 vscode 上运行 android 或 iOS 模拟器进行颤振
- angular - Angular - 应用程序再次将我重定向回登录页面
- r - 带有 huxtable 的相关矩阵中的粗体大值
- python-3.x - 装饰器 backoff.on_predicate 未按预期等待
- java - 为什么 stack.pop 不接受 stack.push 作为参数?
- typescript - 从数组类型创建对象类型,其中键是数组中每个对象中的属性值
- node.js - NodeJS Sharp节点包内存消耗问题
- android - CSS“背景尺寸:封面”不适用于Android设备
- javascript - 如图所示,如何设置垂直 CSS 步骤栏的样式?
- html - 如何根据 Ruby on Rails 中的记录类别有条件地显示表的内容?