MySQL 优化查询以增强比较报告的性能

标签 mysql database jsp

我有两个表“users”和“temp_users”。现在,“users”表包含数百万条数据,“temp_users”表包含数千条数据。这两个表都包含相同类型的信息,但有时可能会丢失某些记录。

所以,需求是比较这两个表,并显示它们之间的差异。我写了比较查询,但可能是由于数据量巨大(数百万),执行时间超过 5 分钟。有什么建议吗??

我写的比较查询如下:

SELECT 
   id,
   dateTime,
   phone,
   address 
FROM 
   tempUsers t1 
WHERE NOT EXISTS (
   SELECT id,dateTime 
   FROM users t2 
   WHERE t1.id = t2.id 
   OR t1.dateTime=t2.dateTime
)

系统采用JSP和MySQL开发,部署在Apache Tomcat

谢谢,

最佳答案

两个观察:

  1. 您真的打算在您的 where 子句中使用“OR”吗?不应该是'AND'吗?如果查询优化器由于“或”逻辑而无法利用索引,“或”可能会导致查询运行得更慢。
  2. 您使用的是子选择而不是 JOIN,这也可能导致称为“相关子查询”的严重问题,其中必须对外部选择返回的每一行执行子选择。

上述两个问题(与 OR 条件相关的子查询)可能是导致问题的原因。

改为尝试以下查询:

SELECT 
   t1.id,
   t1.dateTime,
   t1.phone,
   t1.address 
FROM 
   tempUsers t1 
LEFT OUTER JOIN
   users t2
ON
   t1.id = t2.id 
   AND t1.dateTime=t2.dateTime
WHERE
   t2.id IS NULL

上述查询使用 ID 和 DATETIME 执行“LEFT OUTER JOIN”以连接两个表,然后将结果过滤为仅在 USERS 中没有行的那些。这应该会返回您想要的内容。

如果“OR”条件确实是您需要的逻辑,则在“ON”子句中更改它,但要做好它可能会对查询速度产生不利影响的准备。

为了提高速度:确保 'id'、'dateTime' 或两者都有索引。

希望这对您有所帮助!

约翰...

关于MySQL 优化查询以增强比较报告的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13271678/

相关文章:

javascript - 将 jsp 列表的第一个元素传递给 javascript

java - 使用 Tomcat 7 配置 Servlet、JSP

Spring security JSP 标签 - 我需要哪些 jar?

mysql - 如何在 MySQL 中将一个表与另一个表关联(最好使用 PHPMyAdmin)

mysql - 两个 double 值之间的 SQL 查询

mysql - 删除MySQL中刚好有10行的表

php - 我应该如何使用外键导入mysql数据库中的单独表?

mysql - 将 Yii2 中的变量插入数据库

database - Django : "Soft" ForeignField without database integrity checks

mysql - 无法连接到我的网站上使用 wamp 创建的数据库