0

我想合并两个表,但想排除任何以“?”开头的名称。(实际上任何包含“?”,但所有违规者都以“?”开头。)

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 不是最佳选择,但我想我会在收到代码时显示代码。

我的理解是索引在通配符搜索中没有帮助。

谢谢!

4

2 回答 2

0

使用 REGEXP 相同:

SELECT NAME, AGE, LOCATION FROM TABLEONE WHERE NAME REGEXP '^([^?])'
UNION ALL
SELECT NAME, AGE, LOCATION FROM TABLETWO WHERE NAME REGEXP '^([^?])'
于 2013-04-18T15:06:51.347 回答
0

如果名称以 ? 开头的所有条目有什么特别之处,您可能希望在数据库中有另一个字段来标记它们。仅使用名称并不好-您会遇到这样的问题,而且速度很慢。

于 2013-04-18T15:17:12.857 回答