SELECT
一堆明细数据
FROM
明细表
LEFT JOIN 单据表
LEFT JOIN 项目表
LEFT JOIN 明细关联组织的id表
LEFT JOIN 公司组织结构表
WHERE
明细.`status` = 0 -- 明细状态为正常
and 单据.`status` = 0; -- 单据状态为正常
以上语句执行时间大概是1分钟,如果加上了部门ID != "某部门ID"的条件之后,查询时间直接翻了10倍以上,这是为什么啊?
SELECT
一堆明细数据
FROM
明细表
LEFT JOIN 单据表
LEFT JOIN 项目表
LEFT JOIN 明细关联组织的id表
LEFT JOIN 公司组织结构表
WHERE
明细.`status` = 0 -- 明细状态为正常
and 单据.`status` = 0; -- 单据状态为正常
以上语句执行时间大概是1分钟,如果加上了部门ID != "某部门ID"的条件之后,查询时间直接翻了10倍以上,这是为什么啊?
添加不等于条件可能会导致查询优化器无法使用合适的索引,从而导致查询性能的下降。在这个问题中,如果添加了部门ID的条件,而该条件又没有被索引覆盖,查询优化器可能会选择全表扫描,导致查询时间大幅度增加。
要解决这个问题,可以尝试优化查询语句,使得查询条件能够被索引覆盖,或者在查询之前确保表的索引信息是最新的。例如,可以尝试在查询条件中使用等于操作符而不是不等于操作符,或者使用覆盖索引等技术来避免全表扫描。另外,可以考虑优化查询语句的性能,如分析查询语句的执行计划、增加索引等等。望采纳