我想结合两个表,但想要排除任何以'?'开头的名称。 (实际上任何包含'?'的东西,但所有的犯罪者都以'?'开头。)
SELECT NAME, AGE, LOCATION
FROM TABLEONE
WHERE NAME NOT LIKE CONCAT('?%')
UNION ALL
SELECT NAME, AGE, LOCATION
FROM TABLETWO
WHERE NAME NOT LIKE CONCAT('?%')
LOCK IN SHARE MODE;
这真的很慢。我可以通过更好的查询或索引加快速度吗?
它正在使用concat,因为这是我继承的代码。我希望concat不是最佳选择,但我想我会在收到代码时显示代码。
我的理解是索引对通配符搜索没有帮助。
谢谢!
答案 0 :(得分:0)
使用REGEX:
SELECT NAME, AGE, LOCATION FROM TABLEONE WHERE NAME REGEXP '^([^?])'
UNION ALL
SELECT NAME, AGE, LOCATION FROM TABLETWO WHERE NAME REGEXP '^([^?])'
答案 1 :(得分:0)
如果名称以?开头的所有条目都有特殊之处,您可能希望在数据库中有另一个字段来标记它们。使用这个名字并不是那么好 - 你遇到这样的问题,因为它很慢。