【发布时间】:2017-12-05 02:35:46
【问题描述】:
我有一个大型数据集,我想在 mysql 上用于自动完成(>1M 条记录)。
例如,我正在输入“甲醇”并需要提前输入的建议..
目前我有
select AgentReferenceName as name
from tblAgentReference
where AgentReferenceName like '%methan%'
order by instr(AgentReferenceName,'methan'), char_length(AgentReferenceName)
limit 10;
这工作做得很好,但有点慢
+-------------+
| name |
+-------------+
| Methan |
| Methane |
| Methane |
| Methane |
| Methanal |
| Methanol |
| Methanol |
| Methanide |
| Methanamine |
| Methanamine |
+-------------+
10 rows in set (3.52 sec)
我在该字段上有一个全文索引,但是当我运行通常的全文加权搜索时 - 它会增加较大的单词,所以我得到了
select AgentReferenceName as name from tblAgentReference where match(AgentReferenceName) against ('methano*' in boolean mode) order by match(AgentReferenceName) against ('methano*') limit 10;
+----------------------------------------------------------------------------------------------------------+
| name |
+----------------------------------------------------------------------------------------------------------+
| 2,4-Methanoacridin-9-amine, 8-fluoro-1,2,3,4-tetrahydro-, 2-hydroxy-1,2,3-propanetricarboxylate (3:2) |
| 9-Amino-8-fluoro-1,2,3,4-tetrahydro-2,4-methanoacridine |
| 9-Amino-8-fluoro-1,2,3,4-tetrahydro-2,4-methanoacridine |
| 2,4-Methanoadamantane |
| 2,4-Methanoadamantane |
| 2-Amino-4,5-methanoadipate |
| 1,4-Methanoanthra(2,3-c)oxepin-7,12-dione, 1,3,4,5-tetrahydro-4,6,13-trihydroxy-3,11-dimethoxy-3-methyl- |
| 1,4-Methanoanthracene-9,10-dione, 1,2,3,4-tetrahydro- |
| 1,4-Methanoanthracene-9,10-dione, 1,2,3,4-tetrahydro- |
| 1,4-Methanoanthracene-9,10-dione, 1,2,3,4,4a,9a-hexahydro- |
+----------------------------------------------------------------------------------------------------------+
10 rows in set (0.13 sec)
所以速度很好,但结果很糟糕
我的问题 - 如何进行快速搜索,返回类似于类似查询,但更接近全文搜索的速度?
【问题讨论】:
标签: mysql database query-optimization