【问题标题】:Fulltext index and search speed全文索引和搜索速度
【发布时间】:2014-02-04 21:42:28
【问题描述】:

关于 PHP/MySql 网站上的数据库/速度问题的问题。带有全文搜索的查询似乎很慢。

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

  • 具有大约 225000 行的表的 MySQL 数据库 (myISAM)。

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

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

  • 在 phpmyadmin 中(我们只有 phpmyadmin 访问权限和 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. 在这种情况下,全文搜索是最佳选择吗?

【问题讨论】:

  • 我遇到了这个问题,但我使用了 THINKING SPHINX 非常有用
  • 好吧,我不建议使用像插件这样的全文搜索尝试使用另一种搜索方式
  • 感谢您的回答,我从未听说过狮身人面像,但在阅读了更多相关信息后,我一定会尝试一下。

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


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

  2. 确保您有足够的key_buffer_size 来保存全文索引。如果它必须在每次查询期间不断将部分索引进出键缓冲区,那将会降低性能。

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

【讨论】:

  • 感谢您的回答。我不知道狮身人面像,但在阅读了更多关于此的内容后,我一定会尝试一下。
【解决方案2】:

我推荐你使用 Thinking sphinx is very useful。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-22
    • 2018-10-26
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 2011-03-20
    相关资源
    最近更新 更多