【发布时间】:2016-11-22 19:48:18
【问题描述】:
我想从我的 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);
...
?>
这两个查询都有效,但哪个查询的性能最好?
【问题讨论】:
-
一般来说,
like会比regexp快... -
两者都不会像使用全文索引那样快,但是......看不到索引如何帮助将表中的单词与完整字符串匹配。
-
我的猜测是哪个更快将取决于实际数据;
like通常可能比regexp快(如 sgeddes 所述),但您还需要计算您使用过的CONCAT的成本(在可能相对较长的字符串上昂贵)。 -
INSTR 将是另一种可能的选择。
标签: php mysql database performance