喜欢CONCAT vs REGEXP mysql

时间:2016-07-19 19:06:15

标签: php mysql database performance

我想选择我的mysql数据库中的一行,其中包含一个字符串中的单词,这是一个php变量。 我找到了两种方法:

"SELECT * FROM table WHERE '$string' REGEXP word_column"

"SELECT * FROM table WHERE '$string' LIKE CONCAT('%',word_column,'%')"

例如,如果我的数据库是:

id | word_column
 0 | red
 1 | blue
 2 | green
 ...

然后

<?php
...
$string = 'This string contains word red, so I want mysql to return row 0!';
$best_query = ""; //HERE GOES ONE OF THE QUERIES ABOVE
$result_i_want = mysqli_query($db_connect, $best_query);
...
?>

两个查询都有效,但哪个查询效果最好?

2 个答案:

答案 0 :(得分:0)

"SELECT * FROM table WHERE '$string' LIKE CONCAT('%',word_column,'%')"

更快。正如评论者所指出的,性能在某种程度上还取决于您的数据集。

答案 1 :(得分:0)

要搜索整栏,请勿使用LIKEREGEXP

SELECT ... WHERE word_column = '$string'
-- and have
INDEX(word_column)

用于搜索嵌入在字符串中的单词

SELECT ... WHERE MATCH(string_column) AGAINST ('+$string' IN BOOLEAN MODE)
-- and have
FULTEXT(string_column)

(研究有关FULLTEXT的文档;有一些限制。)