【发布时间】:2010-10-29 13:41:15
【问题描述】:
我有一个使用 Doctrine 的 Searchable 行为的表,它非常适合单字查询。但是我注意到,当查询包含空格时,页面会挂起,并且我无法通过刷新页面等得到任何响应。
如果我在我的 Mac 上打开 Activity Monitor,或者 SSH 然后在 Ububntu 中打开“顶部”,MySQL 正在以高达 300% 的 CPU 运行进程。我必须终止进程才能让事情再次正常运行。
这些是 Doctrine 生成的 SQL 查询:
对于单个单词查询:
SELECT COUNT(*) AS num_results FROM hotel h WHERE h.is_active = '1'
AND h.id IN (SELECT id FROM hotel_index WHERE keyword = 'samui' GROUP
BY id)
对于包含空格的多词查询:
SELECT COUNT(*) AS num_results FROM hotel h WHERE h.is_active = '1'
AND h.id IN (SELECT id FROM hotel_index WHERE id IN (SELECT id FROM
hotel_index WHERE keyword = 'sala') AND id IN (SELECT id FROM
hotel_index WHERE keyword = 'samui') GROUP BY id)
我尝试了一些方法,例如在两个单词周围添加双引号。
谢谢
【问题讨论】:
-
如果你不能让学说更快地工作,你可能想研究sphinxsearch.com或Lucene
-
很简单...因为 MySQL 需要处理很多行,所以它使用了很多 CPU。通过
EXPLAIN运行查询,这应该可以告诉你很多关于发生了什么......但是你正在对 3 个临时表进行 3 次连接,所以它会很慢...... -
某些东西怎么能以 300% cpu 运行?
-
@Petoj:在 3 核
CPU上,很容易。 -
我有一个 4 核 cpu,我仍然只使用 100%,但我使用的是 windows...
标签: php mysql search symfony1 doctrine