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

时间:2015-09-21 20:22:34

标签: mysql performance query-optimization

假设我有以下表格结构" some_table" (目前没有使用索引)

  1. id_notes:主键,long,自动增量,无符号
  2. 标题:varchar(256)
  3. 备注:varchar(500)
  4. notes2:text
  5. 如果在三个字段(标题,备注,备注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. Q2:如果我创建另一列" group_text"它会有所帮助吗?并连接其中的所有三个字段并搜索该group_text字段?
    3. 问题3:如果在查询中使用3个单独的字段,哪种类型的index会更好?
    4. 问题4:如果在查询中使用group_text字段,哪种类型的index会更好(请记住,2个字段是varchar,第3个字段是TEXT类型)?

1 个答案:

答案 0 :(得分:0)

前导%会杀死使用索引的可能性。 OR也是如此。您的查询是最佳编写的。

不,CONCAT不会产生太大影响。

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