我在 MyISAM 数据库中有一个包含 1760 万行的表。
我想在其中搜索一个文章编号,但结果不能依赖于特殊字符,如点、逗号等。
我正在使用这样的查询:
SELECT * FROM `table`
WHERE
replace(replace(replace( replace( `haystack` , ' ', '' ),
'/', '' ), '-', '' ), '.', '' )
LIKE 'needle'
这种方法非常非常慢。table
上有一个索引haystack
,但EXPLAIN
显示查询不能使用它,这意味着查询必须在 3.8 秒内扫描 1760 万行。
查询在一个页面中运行多次(10-15 倍),因此页面加载速度极慢。
我应该怎么办?在查询中使用替换是一个坏主意吗?