关于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还可以吗?发现 关于这个问题的一些答案,但没有明确的答案为什么这样 对于完整的索引是可以的。
速度如何?225000行数据库(未来几周可能增长到300000)需要这么多时间才能执行此查询,这并不奇怪吗?查询有问题吗,可以优化吗?
在这种情况下,全文搜索是最佳选择吗?
答案 0 :(得分:1)
FULLTEXT索引的基数似乎总是报告为1。无论如何,基数与全文索引并不真正相关,因此值1可能只是一个占位符。
确保您有足够的key_buffer_size
来保存全文索引。如果必须在每次查询期间将索引的部分内容交换进出密钥缓冲区,则会导致性能下降。
Sphinx Search是usually faster,而不是MySQL的全文索引。
答案 1 :(得分:0)
我建议你使用Thinking sphinx非常有用。
在这里您可以找到所有信息:
http://pat.github.io/thinking-sphinx/installing_sphinx.html