首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MYSQL -分页查询执行时间问题

MYSQL -分页查询执行时间问题
EN

Stack Overflow用户
提问于 2017-11-06 05:50:11
回答 1查看 572关注 0票数 0

我正在尝试使用MySql在Coldfusion中进行分页,以便一次检索20条记录。首先,我得到我想要检索的记录的总数。

代码语言:javascript
复制
<CFQUERY DATASOURCE="#datasource#" USERNAME="#username#" PASSWORD="#password#" NAME="myCount" CACHEDWITHIN="#CreateTimeSpan(0,0,3,0)#">
   SELECT COUNT(*) as TotalCount
   FROM products
   WHERE products.field1 = <cfqueryparam value = "#myfield#" cfsqltype = "cf_sql_integer" maxLength = "2">
   AND MATCH(field2) AGAINST(<cfqueryparam value = "#TRIM(string)#" cfsqltype = "cf_sql_char" maxLength = "52"> IN BOOLEAN MODE)
</CFQUERY>      

然后,我使用以下代码一次检索20条记录:

代码语言:javascript
复制
<CFQUERY DATASOURCE="#datasource#" USERNAME="#username#" PASSWORD="#password#" NAME="myQuery" result="tmpResult">
    SELECT products.field1, products.field2, products.field3, company.field1, company.field2
    FROM products JOIN company ON products.field1 = company.field1
    WHERE products.field2 = <cfqueryparam value = "#myfield#" cfsqltype = "cf_sql_integer" maxLength = "2">
    AND MATCH(field2) AGAINST(<cfqueryparam value = "#TRIM(string)#" cfsqltype = "cf_sql_char" maxLength = "52"> IN BOOLEAN MODE)
    ORDER by products.field3 DESC
    LIMIT <cfqueryparam value="#start#" cfsqltype="cf_sql_integer">, 20
</CFQUERY>

(注意:每页#start#的值会递增20。)

一切似乎都很正常。当我单击第一个页面时,执行时间(#tmpResult.ExecutionTime#)显示检索20条记录花费了40分钟(我假设是毫秒)。但是,如果我单击最后一页,它可能是记录号40,000,检索最后20条记录需要500毫秒。回过头来看,那些较晚的页面似乎花费了更长的时间来检索。

为什么会有这样的差异?无论是从“正面”还是“背面”检索相同数量的20条记录,不应该花费相同的时间吗?我是不是漏掉了什么?提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2017-11-09 07:00:49

首先阅读和研究我的。请注意,它解释了一种使其更快的方法。

如果初始COUNT(*)可能会很慢,请重新考虑UI。注意到搜索引擎不再告诉你找到了多少项了吗,或者至少只给了你一个大概的答案?从他们很久以前学到的教训中得到一些提示。

来回答你的“为什么”的问题...LIMIT 100, 20必须找到120行,跳过100行,然后交付20行,所以页面变得越来越慢。

但情况会变得更糟。如果查询太复杂,它必须找到所有匹配的行,对所有行进行排序,然后才能进行偏移和限制。在这种情况下,当有大量行时,即使是第一页也很慢。

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

https://stackoverflow.com/questions/47127016

复制
相关文章

相似问题

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