- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有两个表:
表A:
Name, isPair
表 B:
Name1, Name2, Status
这是我的查询:
SELECT Name
FROM A
LEFT JOIN B ON (A.Name = B.Name2)
WHERE A.isPair = 'T' AND (B.status <> 'valid' OR B.status IS NULL)
我在两个表中都有数百万行。按照目前的查询速度,需要 3 个月以上才能完成。我已经适本地为两个表编制了索引。当我最初执行 INNER JOIN 时,只用了 10 分钟就完成了,但我发现查询没有返回不在表 B 的 Name2 列中的行,这是一个问题,因为我需要返回它们。
最佳答案
此查询可能更快地返回正确的结果,或者它可能返回不正确的结果而没有提高速度
这都是基于 SQL Server 知识,但我假设 InnoDB 具有相同的特征。
SELECT Name
FROM A
WHERE A.isPair = 'T'
AND NOT EXISTS (
SELECT 1 FROM B
WHERE A.Name = B.Name2
AND B.status = 'valid'
)
我希望我已经正确地重新安排了 bool 逻辑。
在您搜索 A 中的记录之前,在 B 中没有匹配项或状态为 <> 有效的匹配项
新查询从 A 返回记录,但在 B 中找不到状态为有效的匹配项。希望这是同一回事。
我在这里使用了两个数据库概念:
当使用 EXISTS 时,它可以只查看表记录是否存在,它不必连接到表并从中检索值.....大多数查询计划程序会自动执行此操作,所以这是一个远射
运算符(operator) <>
是不可搜索的,这意味着它不能使用任何包含列 status
的索引...即它不能明确地寻找一个没有值的索引,它只能搜索特定值的索引。所以我把它改成了=
出于这个原因,也因为它支持 NOT EXISTS
逻辑
同样,我对 InnoDB 了解不多,但我敢肯定,如果它没有这些限制,这些技巧早就被 Oracle 和 Microsoft 复制了。
比较查询计划会让您了解这次重写是否有任何不同。此外,比较查询的现有 INNER 和 OUTER 版本之间的查询计划可能会阐明一些事情。
关于mysql - 左连接似乎极大地阻碍了 SQL 查询性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26581019/
我有一个数据 GridView ,如下所示。在 CellEndEdit 事件中,它会更新 MySql 数据库中的表格 - 但前提是您单击另一个单元格,而不是在您按下回车键、制表符、向下箭头等时。 Da
该应用程序是在 Spring Boot 2.0.1 上开发的。我添加了下一个依赖项以便能够使用 JavaMelody - dependency("net.bull.javamelody:javamel
我应该使用 javascript 进行 json 调用: var arr = { username: "user@user.com", password : "mypassword" , portfo
我的症状与 https://forums.aws.amazon.com/message.jspa?messageID=580990#580990 相同但在 EB Docker 预配置 Python 上
我是一名优秀的程序员,十分优秀!