全文索引和搜索速度

时间:2014-02-04 21:42:28

标签: mysql performance full-text-search query-optimization full-text-indexing

关于PHP / MySql网站上的数据库/速度问题的问题。使用全文搜索的查询似乎非常慢。

我不是SQL专家,只是基本网站的简单基本php / html编程和一些基本的MySQL知识。客户对外部程序员开发的搜索选项的速度问题不再可用。我们发现以下信息:

  • MySQL数据库,表格大约有225000行(myISAM)。

  • 列(DATA),其中包含需要搜索的数据的全文索引。

  • 此列每行平均包含200个字。

  • 在phpmyadmin(我们只有phpmyadmin access和ftp没有直接服务器访问),我们看到全文索引的基数是1。

  • 有一个特定的查询似乎非常慢,当在phpmyadmin中我们为此查询执行EXPLAIN时它会返回:

    id select_type table type possible_keys key key_len ref rows Extra 1
    SIMPLE T_SEARCHDATA fulltext DATA DATA 0 1 Using where; Using
    filesort 1 SIMPLE TU_CUS const PRIMARY PRIMARY 4 const 1 Using
    index 1 SIMPLE M_CATEGORY eq_ref PRIMARY PRIMARY 4
    buitenbeeld.T_SEARCHDATA.PC_ID 1 Using index
    

执行查询时,在执行查询之前需要退出一段时间,使用以下查询:

    SELECT T_SEARCHDATA.MID,T_SEARCHDATA.MT_IMG,T_SEARCHDATA.MP_IMG,T_SEARCHDATA.M_ACTIVE,T_SEARCHDATA.TITLE
    FROM T_SEARCHDATA LEFT JOIN TU_CUS ON TU_CUS.UB_ID = 0 LEFT
    JOIN M_CATEGORY ON M_CATEGORY.PC_ID = T_SEARCHDATA.PC_ID
    WHERE MATCH (T_SEARCHDATA.DATA) AGAINST ('+searchword1* +searchword2* +searchword3*' IN BOOLEAN MODE) AND M_ACTIVE = 1 ORDER BY T_SEARCHDATA.UPDATE DESC
    LIMIT 0,30 

我们的问题

上面的查询需要5到30秒才能执行,具体取决于确切的搜索词。第一次我们第二次执行查询时它非常快,某种缓存似乎被激活了???

我的一些更具体的问题:

  1. 全文索引的基数是1还可以吗?发现 关于这个问题的一些答案,但没有明确的答案为什么这样 对于完整的索引是可以的。

  2. 速度如何?225000行数据库(未来几周可能增长到300000)需要这么多时间才能执行此查询,这并不奇怪吗?查询有问题吗,可以优化吗?

  3. 在这种情况下,全文搜索是最佳选择吗?

2 个答案:

答案 0 :(得分:1)

  1. FULLTEXT索引的基数似乎总是报告为1。无论如何,基数与全文索引并不真正相关,因此值1可能只是一个占位符。

  2. 确保您有足够的key_buffer_size来保存全文索引。如果必须在每次查询期间将索引的部分内容交换进出密钥缓冲区,则会导致性能下降。

  3. Sphinx Searchusually faster,而不是MySQL的全文索引。

答案 1 :(得分:0)

我建议你使用Thinking sphinx非常有用。

在这里您可以找到所有信息:

http://pat.github.io/thinking-sphinx/installing_sphinx.html