mysql - 如何编写优化的 MySQL 搜索文本查询,替代 OR

标签 mysql performance query-optimization

假设我有以下“some_table”表结构(当前未使用索引)

  1. id_notes:主键,,自动递增,无符号
  2. 标题:varchar(256)
  3. 注释:varchar(500)
  4. 注释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. 问题1:是否可以在不更改表结构的情况下进一步优化该查询?
  2. 问题 2:如果我创建另一列“group_text”并将其中的所有三个字段连接起来并搜索该 group_text 字段,会有帮助吗?
  3. 问题 3:如果在查询中使用 3 个单独的字段,哪种类型的索引会更好?
  4. 问题 4:如果在查询中使用 group_text 字段,哪种类型的 index 会更好(记住 2 个字段是 varchar,第 3 个字段的类型是 TEXT )?

最佳答案

前导的 % 消除了使用索引的可能性。 OR 也是如此。您的查询已以最佳方式编写。

不,CONCAT 不会有太大区别。

但是...考虑在 3 列上使用 FULLTEXT。如果FULLTEXT 的限制可以接受,将会更快。

关于mysql - 如何编写优化的 MySQL 搜索文本查询,替代 OR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32703927/

相关文章:

scala - 获取两个列表的元素总和的最快方法

asp.net - 在生产服务器中分析 asp.net 网站的可能方法?

MySQL 选择唯一排序字段值

mysql - 多个日期时间的mysql SUM问题

mysql - 如何在忽略数据库中列的默认值的情况下发布表单数据

mysql - 有没有办法简化下面的 mysql 查询?

mysql - WHERE 谓词的顺序和 SQL 优化器

php - 用同一个查询查询两个数据库

asp.net - 是否有人在Mono上运行生产ASP.NET网站?

c# - ToList<T>() 与 ToList()