我不能真正使用 IN 语句,因为在我的情况下通配符是非常必要的。感谢您的帮助。
AND ((NOT (j.Note LIKE '%audit%'
OR j.Note LIKE '%discrepancy%'
OR j.Note LIKE '%returns%'
OR j.Note LIKE '%shipment error%'
OR j.Note LIKE '%inventory adjustment%'))
OR j.Note IS NULL)
最佳答案
您无法查看所有 行。
LIKE '%...'
由于前导通配符而无法使用索引REGEXP
可以一次完成所有测试,而不是多次LIKE
,所以它可能更快AND NOT (...)
没有帮助OR
没有帮助FULLTEXT
由于“负面”测试,所以帮助不大。- 等等
我推荐这个:
AND j.Note IS NOT NULL
AND j.Note REGEXP 'audit|discrepancy|returns|shipment error|inventory adjustment'
如果 Note
有很多 NULL
,那么 INDEX(Note)
可能通过避免 NULL
。
这是另一种方法:当您插入 行时,将它们分类为“审计”或...然后有另一列(可能是 SET
)标记每个类别注属于。
如果每个 Note 只属于一个类别,则使用 ENUM 并对其进行索引。否则,测试 SET 会比 LIKE 或 REGEXP 快一点。
关于mysql - 我如何优化其中包含多个 NOT LIKE 语句的 AND?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30265297/