首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >避免在全文搜索过程中受到组成员的影响?

问避免在全文搜索过程中受到组成员的影响?
EN

Database Administration用户
提问于 2013-02-24 14:52:04
回答 1查看 314关注 0票数 1

有什么聪明的方法可以避免在全文搜索过程中使用group by吗?

代码语言:javascript
复制
SELECT p.topic_id, min(p.post_id) 
FROM forum_posts AS p 
WHERE MATCH (p.post_text) AGAINST ('baby shoes' IN BOOLEAN MODE)
GROUP BY p.topic_id
LIMIT 20;

在本例中,它为匹配文本的唯一post_id获取最低的topic_ids。

为了找到最小值,这个组在一个百万行数据库中花费了600‘s,检查了大约50K行。

如果我去掉了分钟,但离开了小组,这是同样的慢,所以这是组击中。

我怀疑这是因为它只能使用一个索引,全文?

代码语言:javascript
复制
key: post_text | Using where; Using temporary; Using filesort

Query_time: 0.584685  Lock_time: 0.000137  Rows_sent: 20  Rows_examined: 57751
Full_scan: No  Full_join: No  Tmp_table: Yes  Tmp_table_on_disk: No
Filesort: Yes  Filesort_on_disk: No  Merge_passes: 0

如果没有分组,它是1ms,所以这必须是文件的速度吗?

(我已经删除了命令和其他一切来隔离命中的地方)

谢谢你的洞察力和想法。

(如果重要的话,在mariadb下使用MyISAM )

EN

回答 1

Database Administration用户

发布于 2013-02-24 15:34:21

您可以尝试查看tmp_table_size变量并增加它。组by必须使用临时表进行文件排序。临时表很可能超出了允许的大小,并被转储到磁盘进行最后的排序处理(非常慢)。

如果你这样做了:

代码语言:javascript
复制
SHOW VARIABLES LIKE 'CREATED_TMP%' 

看看Created_tmp_tables与created_tmp_disk_tables的比率,这会告诉你这个值是否太小。

另见:http://dev.mysql.com/doc/refman/5.0/en/internal-temporary-tables.html

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/35339

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档