MySQL like 和 regexp 比较

上周一位客户问我 MySQL 中哪个更好:eg 或正则表达式。
我向他详细解释了这一点。

首先,我们需要谈谈性能。
一般来说,此类操作的性能比正则表达式要高。
与我之前遇到的情况一样,当查询以“@1 6 3 .com”结尾的帖子时,Like 操作只需要 0.2 0 秒,而正则表达式需要 0.3 5 秒。
所以,如果你只想做一些简单的模式匹配,一个 like 就足够了。

但是,如果您需要更复杂的匹配,例如特定的字符集、字符出现的次数、位置等,那么正则表达式是一个强大的工具。
它支持正则表达式语法,可以实现如此复杂的匹配。

简单来说,如果你只是想快速匹配一些基本的东西,就使用Like。
但如果您的需求更复杂,正则表达式是更好的选择。

但是,您选择哪种方法取决于您的具体需求。
有时您可能需要在查询性能和灵活性之间找到平衡。
这需要您执行定期测试和性能调优,以确保尽管数据发生变化,数据库查询仍保持高效和准确。

无论如何,都由你决定。
两种方法都有其优点。
关键取决于你如何使用它们。
这个问题我还在思考,等大家使用的时候再详细讨论。

mysql的like怎么用

嘿,我们来谈谈MySQL中的LIKE运算符。
这件事就像在数据库里找东西一样,你必须使用一些技巧。
首先你需要了解基本用法,比如:
SELECT FROM 表名 WHERE 列名 LIKE 'schema';
这种“模式”允许使用通配符,它类似于放大镜,可以帮助您找到更精确的数据。

例如,如果您想查找名字以“John”开头的人,您可以这样写:
从姓名类似“John%”的客户中选择;
这里的%是通配符,代表任意长度的字符,包括无。

另一个例子:您想要找到名称中包含“Doe”的东西,无论它在哪里:
从名称类似“%Doe%”的客户中进行选择;
至于_,它只匹配一个字符。
例如,如果您想查找名字为“John”并且长度恰好为四个字符的人:
从名称如“J___”的客户中进行选择;
还有【列表】,稍微复杂一点。
它匹配括号中列出的每个字符。
但是MySQL默认不支持这种语法,所以必须使用其他方法,比如正则表达式。

例如,如果您想查找以 a、b 或 c 开头的名称:
从客户中选择名称 REGEXP '^[abc]';
至于[^list]或[!list],则相反。
它匹配任何不在括号中的字符。

还有扩展用途。
例如,如果您想查找第二个字符为“o”且以“e”结尾的姓名:
从客户中选择名称类似“_o%e”的客户;
这个“_”排在第二位,代表任何字符。

当然,使用LIKE时,不要忘记转义特殊字符。
例如,如果您要搜索包含下划线的文本:
从文件名类似于“%_%”的文件中选择;
此处下划线被反斜杠\ 掩盖。

如果你想排除某些模式,你可以使用 NOT LIKE:
从不喜欢“John%”这个名字和“%Doe%”这个名字的客户中进行选择;
从性能角度来看,请注意,如果模式不以通配符(例如“John%”)开头,则 LIKE 可以使用索引。
但是,如果是前导通配符,例如“%Doe%”,则会导致全表扫描,从而影响性能。

区分大小写问题默认区分大小写,但可以通过 COLLATE 进行调整,如下所示:
从客户中选择名称类似“john%”的 COLLATE utf8 _general_ci;
utf8 _general_ci 的此设置不区分大小写。

最后,如果您需要更复杂的模式匹配,请考虑使用 REGEXP 或全文索引。
这些方法更强大,但请注意它们可能比 LIKE 慢。

总之,LIKE是一个非常强大的工具,但是使用时一定要小心,不要让它拖慢你的查询速度。