mysql - 我如何优化其中包含多个 NOT LIKE 语句的 AND?

标签 mysql performance

我不能真正使用 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 只属于一个类别,则使用 E​​NUM 并对其进行索引。否则,测试 SET 会比 LIKE 或 REGEXP 快一点。

关于mysql - 我如何优化其中包含多个 NOT LIKE 语句的 AND?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30265297/

相关文章:

PHP 计数器,用于从按钮获取唯一引用

MySQL Join 结果错误

性能测试基础知识

mysql - 插入时触发 SQL 更新

mysql - 寻找棘手的sql查询解决方案

php替换数组id键

mysql - 将多个长文本放入同一个表 mysql 中是一个好习惯吗?

sql - Rails 4 并使用 Sunspot : is it possible to prevent n+1 queries when retrieving search results? 进行搜索

r - 用 R 计算字符串中的空格序列

python - Python Testdome 的两次和测试 - 如何通过性能测试?