mysql全文搜索,联合执行缓慢

时间:2013-12-13 19:22:19

标签: mysql sql

我有一个数据库,我不得不从MS SQL转移到MySQL。我能够将其迁移并获得(大部分)启动和运行,但性能在以下查询中受到重创。

在MS SQL中,查询将在不到2秒的时间内运行,但现在在MySQL中需要1-2分钟。在MS SQL中它使用的是CONTAINS运算符而不是MATCH,但是当我移动到MySQL时,我创建了主题并注意了列全文索引。

有两个单独的表 - 都包含“主题”和“完整备注”字段。数据库非常大,我正在尝试进行自由文本搜索,在任一表中的任一字段中查找匹配项。

如果有人可以帮我优化查询,我真的很感激。

SELECT cs.SWCaseID, cs.SWSubject, cs.SWNote
FROM tblSCasesSearch cs
WHERE cs.SWCaseID in
    (SELECT cs.SWCaseID 
    FROM tblSCasesSearch cs 
    WHERE MATCH (cs.SWSubject, cs.SWNote) AGAINST ('SEARCH VALUE' IN BOOLEAN MODE)
union
    SELECT csn.SWCaseID
    FROM tblSCaseNotesSearch csn
    WHERE MATCH (csn.SWSubject, csn.SWNote) AGAINST ('SEARCH VALUE' IN BOOLEAN MODE))
LIMIT 50

1 个答案:

答案 0 :(得分:1)

尝试将查询重写为显式连接:

SELECT cs.SWCaseID, cs.SWSubject, cs.SWNote
FROM tblSCasesSearch cs left outer join
     (SELECT distinct cs.SWCaseID 
      FROM tblSCasesSearch cs 
      WHERE MATCH (cs.SWSubject, cs.SWNote) AGAINST ('SEARCH VALUE' IN BOOLEAN MODE)
     ) scs
     on cs.SWCaseId = scs.SWCaseId left outer join
     (SELECT distinct cs.SWCaseID 
      FROM tblSCaseNotesSearch cs 
      WHERE MATCH (cs.SWSubject, cs.SWNote) AGAINST ('SEARCH VALUE' IN BOOLEAN MODE)
     ) scns
     on cs.SWCaseId = scns.SWCaseId
WHERE scs.SWCaseId is not null or scns.SWCaseId is not null
limit 50;