我想选择我的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);
...
?>
两个查询都有效,但哪个查询效果最好?
答案 0 :(得分:0)
"SELECT * FROM table WHERE '$string' LIKE CONCAT('%',word_column,'%')"
更快。正如评论者所指出的,性能在某种程度上还取决于您的数据集。
答案 1 :(得分:0)
要搜索整栏,请勿使用LIKE
或REGEXP
:
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的文档;有一些限制。)