我想写一个查询来搜索一个包含数百万条记录的表,寻找一个完全匹配搜索字符串或其子字符串的值。表现是最重要的。
就像一个反面:
SELECT * FROM table_name WHERE column_name LIKE '$input%' LIMIT 1
例如,我想在下表中搜索foobar。如果foobar不存在,则搜索fooba直到最后一个字符f,并返回完全匹配的行。
+------------------+
| column_name |
+------------------+
| foobar |
+------------------+
| fooba |
+------------------+
| foob |
+------------------+
| foo |
+------------------+
| fo |
+------------------+
| foobarrrrr |
+------------------+
| foooooooooooo |
+------------------+
| barfoo |
+------------------+
2条答案
按热度按时间flmtquvp1#
我不认为有一个真正的性能方法,但下面可能会做你想要的。
首先,在上创建索引
t(column_name)
.然后,将查询构造为:
笔记:
这是循环通过的前缀
$input
有不同的长度。您可以使用php实现这一点,并在第一次匹配时停止。上的索引
column_name
应用于比较。这只适用于精确的子串匹配(我就是这样解释这个问题的)。
daolsyd02#
可以使用列值来构造
LIKE
动态模式。请注意,如果表很大,这将很慢,因为我认为它不能使用索引。如果这是个问题,那么动态构建查询会更好。