its*_*sme 5 mysql match sql-like
嗨,我担心如何实现一个简单的搜索查询,我的方案是:
tag VARCHAR 255
Run Code Online (Sandbox Code Playgroud)
现在我需要在标签字段内搜索,我可以使用两种查询:
SELECT * FROM table WHERE tag LIKE '%1111%' OR LIKE '%2222%' OR LIKE '%3333%';
Run Code Online (Sandbox Code Playgroud)
要么
SELECT * ,MATCH(tag) AGAINST('+1111','+2222','+3333' IN BOOLEAN MODE) as score FROM table ORDER BY score DESC ;
Run Code Online (Sandbox Code Playgroud)
哪个更准确/更准确哪个更快?
谢谢
Mar*_*c B 16
您的搜索不相同.LIKE %1%会发现任何包含1,例如100,911,0.1.这只是一个普通的子串匹配.MATCH ('+1')理论上可以工作,但默认情况下FULLTEXT忽略任何长度<4个字符的"单词".但是,假设您放宽了全文长度限制,+1则会发现任何1不相关的内容,而不是任何嵌入在另一个单词中的内容.为此您需要+*1*.
Bil*_*win 10
最快的解决方案是为标记创建一个正确规范化的表,以便每个标记存储在一个单独的行上.
CREATE TABLE tags (
tag VARCHAR(4),
tableid INT,
PRIMARY KEY (tag, tableid),
KEY (tableid, tag)
);
SELECT * FROM `table` JOIN tags ON table.tableid = tags.tableid
WHERE tags.tag IN ('1111', '2222', '3333');
Run Code Online (Sandbox Code Playgroud)
优点:
LIKE.table使用主键索引.table使用辅助密钥索引.table.| 归档时间: |
|
| 查看次数: |
14284 次 |
| 最近记录: |