我无法真正使用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)
答案 0 :(得分:0)
您仍然看着所有行。
LIKE '%...'
无法使用索引
REGEXP
可以一次性完成所有测试,而不是多个LIKEs
,所以它可能会更快AND NOT (...)
没有帮助OR
没有帮助FULLTEXT
无法提供帮助。我推荐这个:
AND j.Note IS NOT NULL
AND j.Note REGEXP 'audit|discrepancy|returns|shipment error|inventory adjustment'
如果Note
有很多NULLs
,那么INDEX(Note)
可以帮助避免NULLs
。
这是另一种方法:当你插入行时,将它们归类为“审计”或......然后有另一列(可能是SET
)标记每个Note所属的类别
如果每个Note只属于一个类别,则使用ENUM并将其编入索引。如果没有,测试SET将比LIKE或REGEXP快一点。