使用 SQL_CALC_FOUND_ROWS 的 Mysql 全文搜索性能

Posted

技术标签:

【中文标题】使用 SQL_CALC_FOUND_ROWS 的 Mysql 全文搜索性能【英文标题】:Mysql fulltext search performance with SQL_CALC_FOUND_ROWS 【发布时间】:2012-10-09 05:25:32 【问题描述】:

我正在尝试优化我的应用程序中某些查询的性能。

在一个包含多个连接和全文搜索的查询中,我在第一个查询中使用SQL_CALC_FOUND_ROWS 进行分页。

不幸的是查询的性能很慢,如果没有SQL_CALC_FOUND_ROWS,查询速度大约快了100倍。

在这种情况下我有可能获得更好的性能吗?

我尝试了不带SQL_CALC_FOUND_ROWS 的单个计数查询,但此查询比SQL_CALC_FOUND_ROWS 查询慢了一秒。

【问题讨论】:

【参考方案1】:

在不了解您的表结构和查询的情况下,我们无法判断查询是否可以更快。

使用SQL_CALC_FOUND_ROWS,它首先需要处理所有记录,但如果您使用 LIMIT 10,它可以在找到的前 10 个记录之后停止处理记录。所以存在性能差异。如果不使用计数或 SQL_CALC_FOUND_ROWS,则无法更快地获得相同的结果。

但大多数情况下,可以通过不同方式优化查询。

如果您正在研究全文搜索,请考虑使用 sphinx。以我的经验,它总是会胜过 mysql:http://www.sphinxsearch.com/

【讨论】:

以上是关于使用 SQL_CALC_FOUND_ROWS 的 Mysql 全文搜索性能的主要内容,如果未能解决你的问题,请参考以下文章

黄聪:mysql的SQL_CALC_FOUND_ROWS 使用 类似count(*) 使用性能更高

MySQL中SQL_CALC_FOUND_ROWS的用法

使用limit查询的同时取得总的记录数:SQL_CALC_FOUND_ROWS和FOUND_ROWS()

SQL_CALC_FOUND_ROWS 在 mysql 中不起作用

SQL Server 中是不是有等效的 SQL_CALC_FOUND_ROWS?

哪个最快? SELECT SQL_CALC_FOUND_ROWS FROM `table`,或 SELECT COUNT(*)