SQL LIKE 查询的一个问题

在做用户管理的时候,用户表(users) 有一个字段(dept)用来存储用户所在部门的信息, 字段的值一般是这样的,各级部门间使用横杠分隔:

XX宝\n技术部 XX宝\n技术部\n数据仓库

我们的系统有一个根据用户所在部门进行过滤的功能,所以我们用了类似下面的查询语句:

1SELECT \n FROM users WHERE dept LIKE "XX宝\n技术部%";

这样的性能还好,但是今天发现一个问题是,当有两个部门名称很相似,比如:

XX宝\nCEO XX宝\nCEO办公室

这时在查询 XX宝CEO 的时候就会把 XX宝\nCEO办公室 的用户也查询出来。

于是想到正则表达式:

1SELECT \n
2FROM users
3WHERE REGEXP\nLIKE(dept, "^XX宝\nCEO\n")
4OR REGEXP\nLIKE(dept, "^XX宝\nCEO\n[\w\\n]+");

合并正则表达式的另一解:

1SELECT \n
2FROM users
3WHERE REGEXP\nLIKE(dept, "^XX宝\nCEO(\n|\n[\w\\n]+)");

杯具的性能问题。

突然想到

1SELECT \n
2FROM users
3WHERE dept="XX宝\nCEO"
4OR dept LIKE "XX宝\nCEO\n%";

于是简单有效的解决了这个问题。