2
SELECT t1 . * FROM table1 t1, table1 t2
   WHERE t1.history_id < t2.history_id
     AND (t1.license_id = t2.license_id
        OR (t1.license_id IS NULL AND t2.license_id IS NULL))
     AND t1.op_id = t2.op_id
     AND (t1.service_date = t2.service_date
         OR (t1.service_date IS NULL AND t2.service_date IS NULL))
     AND t1.customer_id = t2.customer_id
     AND t1.serial_id = t2.serial_id.

查询的目的是根据上述查询条件去除重复的行。查询将表“table1”连接到自身。我们创建了带有组索引的索引

  1. license_id
  2. 服务日期
  3. 客户ID
  4. history_id(主键)
  5. op_id。

它可以正确执行,但添加OR (t1.service_date IS NULL AND t2.service_date IS NULL)会使查询执行速度非常慢。该表有 2 个以上的数据缺失。

我们使用了 MySQLEXPLAIN命令,这是输出

在此处输入图像描述

如何提高查询执行时间?

4

1 回答 1

0

问题是'IS NULL'。请阅读此内容以获取更多信息:何时使用 IS NULL

一种解决方案是从表中删除 NULL 值(例如将其更改为“0”,因为它不是有效的 MYSQL 自动增量值),然后将“IS NULL”更改为“= 0”

于 2012-11-09T15:27:17.717 回答