排除查询中字符的最快方法

时间:2013-04-18 14:44:34

标签: mysql performance

我想结合两个表,但想要排除任何以'?'开头的名称。 (实际上任何包含'?'的东西,但所有的犯罪者都以'?'开头。)

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

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

谢谢!

2 个答案:

答案 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)

如果名称以?开头的所有条目都有特殊之处,您可能希望在数据库中有另一个字段来标记它们。使用这个名字并不是那么好 - 你遇到这样的问题,因为它很慢。