假设我有以下“some_table”表结构(当前未使用索引)
- id_notes:主键,
长
,自动递增,无符号 - 标题:
varchar(256)
- 注释:
varchar(500)
- 注释2:
文本
如果在三个字段(标题、注释、注释2)中的任何一个中找到关键字,我需要返回结果
一些示例查询如下
SELECT
id_notes, title, notes
FROM
some_table
WHERE
title like '%search_keyword%'
OR
notes like '%search_keyword%'
OR
notes2 like '%search_keyword%'
如何一步步进行优化。
- 问题1:是否可以在不更改表结构的情况下进一步优化该查询?
- 问题 2:如果我创建另一列“group_text”并将其中的所有三个字段连接起来并搜索该 group_text 字段,会有帮助吗?
- 问题 3:如果在查询中使用 3 个单独的字段,哪种类型的
索引
会更好? - 问题 4:如果在查询中使用 group_text 字段,哪种类型的
index
会更好(记住 2 个字段是varchar
,第 3 个字段的类型是TEXT
)?
最佳答案
前导的 %
消除了使用索引的可能性。 OR
也是如此。您的查询已以最佳方式编写。
不,CONCAT
不会有太大区别。
但是...考虑在 3 列上使用 FULLTEXT
。如果FULLTEXT
的限制可以接受,将会更快。
关于mysql - 如何编写优化的 MySQL 搜索文本查询,替代 OR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32703927/